我目前正在用Python为Maya编写一个UI脚本。在
因此,我有一个在顶部有不同选项卡的UI,我不想把每一段代码都放在MainClass
中,因为那样会太混乱和太长。对于每个选项卡,我希望在不同的.py
文件中编写其脚本。我想在__init__
函数下创建连接,同时将另一个脚本中的函数加载到要使用的MainClass
中。在
问题是,我应该如何在新文件中从UI调用objectName?我试图导入MainClass
代码,但是没有成功,我不希望在新的.py
文件中初始化UI窗口。有什么好办法?在
编辑
示例:
在测试.ui文件有一个标记为“打印”的按钮和一个列表小部件。每次按下“打印”按钮,列表小部件上就会出现“Hello World”字样。在
在loadUi中_测试.py文件
def loadUi(uiFile):
#code that loads ui
def getMayaWindow():
#gets main Maya Window
ptr = apiUI.MQtUtil.mainWindow()
if ptr is not None:
return shiboken.wrapInstance(long(ptr), QtGui.QMainWindow)
class mainClass():
def __init__(self, parent = getMayaWindow()):
super(pipeWindow,self).__init__(parent)
self.setupUi(self)
def closeEvent(self,event):
super(mainClass, self).closeEvent(event)
在功能上_测试.py在
^{pr2}$在init中.py
from pipeline import loadUi_test
from pipeline import function_test
uiFile = "test.ui"
b = loadUi_test.loadUi(uiFile)
a = loadUi_test.mainClass()
a.pushButton.clicked.connect(function_test.printFunc(b))
这不起作用,我得到一个错误“tuple object has no attribute listWidget”
如果我改为这样做:a.pushButton.clicked.connect(function_test.printFunc(a))
,我会得到错误“Failed to connect signal clicked()”
一般来说,只要python路径上的所有文件都可用,就可以从其他文件加载类。可以使用import语句加载类。
典型模式的一个基本示例在磁盘上如下所示
其中,主工具是
^{pr2}$mytool
,它在__init__.py
中定义,而组件则位于其他文件中。可以使用from SomeModule import SomeClass
模式导入类。这样就很容易把你的作品放在单独的文件里。您可以在__init__.py
中构造导入有了它,您就可以使用在其他文件中定义的类来组装实际的gui。您可以将主类放在
__init__.py
中,或者放在一个单独的文件中,这似乎很方便相关问题 更多 >
编程相关推荐