问题描述
这里有两个问题。 我不了解如何让我的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窗口现在会打开并迅速出现/消失。 我不确定为什么将这段代码放入函数中并调用它会导致更改? 请帮忙,我一直坐在那里,不知道为什么。
1楼
我认为如果已经有Maya创建的QApplication
实例,则不需要调用app.exec_()
。
我怀疑在这种情况下该调用可能什么都不做,这就是为什么您的函数返回(这很好,否则会阻止maya的其余部分)。
对话框消失的问题是因为您没有保存对Dialog
变量的引用,因此当main
函数完成时会对其进行垃圾回收。
您应该从函数返回Dialog
并将其存储在永久位置,以防止垃圾回收。
我怀疑执行dialog = swap.main()
就足够了(不要忘记也添加return Dialog
行)