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のファイラが表示されるのでちょっといまいちな感じです。