QT Gui Window 在 Maya 中出现然后消失
QT Gui Window appears then disappears in Maya
这里有两个问题。我不明白如何让我的 GUI 代码作为 Maya 架子按钮而不是脚本编辑器中的 运行。我的第一个问题是是否有任何简单的方法可以在 if --main-- 部分调用我的代码?现在我不得不将我拥有的几行代码放入它自己的函数中并以这种方式调用。这是我拥有的:
from PySide import QtCore, QtGui, QtUiTools
import maya.cmds as cmds
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(400, 300)
GUI STUFF HERE
def retranslateUi(self, Dialog):
SET TEXT STUFF
def closeBtn_clicked(self):
DO SOMETHING
def swapRefBtn_clicked(self):
DO SOMETHING
if __name__ == "__main__":
import sys
app = QtGui.QApplication.instance()
if app is None:
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
app.exec_()
我这样做是作为搁架按钮,这显然不起作用(无论如何都可以访问 if "--main--" 中的代码段?):
import swapRef as swap
swap.main()
我发现的唯一修复方法是将所有这些都放入它自己的函数中,然后调用它:
def main():
import sys
app = QtGui.QApplication.instance()
if app is None:
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
app.exec_()
然而...问题#2 当我进行此更改时,我的 GUI Window 现在会弹出并快速 poofs/disappears。我不确定为什么将这段代码放入一个函数中并调用它会导致这种变化?请帮忙,我一直坐在这上面,不知道为什么。
如果已经有 Maya 创建的 QApplication
实例,我认为您不需要调用 app.exec_()
。我怀疑在那种情况下调用可能什么都不做,这就是为什么你的函数 returns (这很好,否则它会阻止玛雅的其余部分)。
你的对话框消失的问题是因为你没有保存对 Dialog
变量的引用,所以当 main
函数完成时它被垃圾收集。您应该 return Dialog
从您的函数中并将其存储在永久性的地方以防止垃圾收集。我怀疑做 dialog = swap.main()
就足够了(不要忘记也添加 return Dialog
行)
这里有两个问题。我不明白如何让我的 GUI 代码作为 Maya 架子按钮而不是脚本编辑器中的 运行。我的第一个问题是是否有任何简单的方法可以在 if --main-- 部分调用我的代码?现在我不得不将我拥有的几行代码放入它自己的函数中并以这种方式调用。这是我拥有的:
from PySide import QtCore, QtGui, QtUiTools
import maya.cmds as cmds
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(400, 300)
GUI STUFF HERE
def retranslateUi(self, Dialog):
SET TEXT STUFF
def closeBtn_clicked(self):
DO SOMETHING
def swapRefBtn_clicked(self):
DO SOMETHING
if __name__ == "__main__":
import sys
app = QtGui.QApplication.instance()
if app is None:
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
app.exec_()
我这样做是作为搁架按钮,这显然不起作用(无论如何都可以访问 if "--main--" 中的代码段?):
import swapRef as swap
swap.main()
我发现的唯一修复方法是将所有这些都放入它自己的函数中,然后调用它:
def main():
import sys
app = QtGui.QApplication.instance()
if app is None:
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
app.exec_()
然而...问题#2 当我进行此更改时,我的 GUI Window 现在会弹出并快速 poofs/disappears。我不确定为什么将这段代码放入一个函数中并调用它会导致这种变化?请帮忙,我一直坐在这上面,不知道为什么。
如果已经有 Maya 创建的 QApplication
实例,我认为您不需要调用 app.exec_()
。我怀疑在那种情况下调用可能什么都不做,这就是为什么你的函数 returns (这很好,否则它会阻止玛雅的其余部分)。
你的对话框消失的问题是因为你没有保存对 Dialog
变量的引用,所以当 main
函数完成时它被垃圾收集。您应该 return Dialog
从您的函数中并将其存储在永久性的地方以防止垃圾收集。我怀疑做 dialog = swap.main()
就足够了(不要忘记也添加 return Dialog
行)