Maya2018でcmds.confirmDialogの結果を受け取った直後にQFileDialogでファイラを開いたときにファイラがすぐに閉じてしまうという現象に遭遇しまして。
具体的には以下のようなコード。
from Qt import QtWidgets,QtCore from maya import cmds def main(): res = cmds.confirmDialog(title="Warning", message=u"ディレクトリを指定してください。", button=["Yes", "No"], defaultButton="Yes", cancelButton="No", dismissString="No") if res != "Yes": return select_directory() return def select_directory(): value = QtWidgets.QFileDialog.getExistingDirectory(None,options=QtWidgets.QFileDialog.DirectoryOnly|QtWidgets.QFileDialog.ShowDirsOnly) if value: print("ok",value) else: print("ng") return main()
このconfirmDialogを以下のようにMessageBoxに変えても同じ。
res = QtWidgets.QMessageBox.warning(None, "Warning", u"ディレクトリを指定してください。",QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.No,QtWidgets.QMessageBox.Ok) if res != QtWidgets.QMessageBox.Ok: return
というわけでselect_directoryメソッドを以下のように変更evalDeferredで実行してやると問題が解消しました。
cmds.evalDeferred(select_directory)
解せぬ…。
ちなみに以下のようにQFileDialog.getExistingDirectoryのオプションにDontUseNativeDialogを追加してやっても解消します。
value = QtWidgets.QFileDialog.getExistingDirectory(None,options=QtWidgets.QFileDialog.DirectoryOnly|QtWidgets.QFileDialog.ShowDirsOnly|QtWidgets.QFileDialog.DontUseNativeDialog)
が、これだと設定のDialogStyleの値に関係なくMayaのファイラが表示されるのでちょっといまいちな感じです。