我目前正在为Python编写Maya的UI脚本。
所以,我的UI顶部有不同的标签,我不想把每一段代码放在MainClass
中,因为那样太乱了。对于每个选项卡,我想在不同的.py
文件中编写其脚本。我想在__init__
函数下创建连接,同时将函数从另一个脚本加载到要使用的MainClass
中。
问题是,如何在新文件中从UI调用objectName?我尝试导入MainClass
代码,但这不起作用,我不想在新的.py
文件中初始化UI窗口。有什么好办法可以解决这个问题?
修改
示例:
test.ui文件有一个标有“Print”的按钮和一个列表Widget。每按一次“打印”按钮,列表小部件上将出现“Hello World”字样。
在loadUi_test.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)
在function_test.py
中def printFunc():
listWidget.clear()
listWidget.addItem("Hello World!")
在 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))
这不起作用,我收到错误“元组对象没有属性listWidget”
如果我这样做:a.pushButton.clicked.connect(function_test.printFunc(a))
,我收到错误“无法连接信号点击()”
答案 0 :(得分:0)
通常,只要python路径上的所有文件都可用,就可以从其他文件加载类。您可以使用import语句加载类。
典型模式的基本示例在磁盘上看起来像这样
__init__.py
主要工具是from SomeModule import SomeClass
,在__init__.py
中定义,组件部分在其他文件中。您可以使用from mytool.model_tab import ModelTab
from mytoool.texture_tab import TextureTab
from mytool.tool_tab import ToolTab
模式导入类。这样可以轻松地将您的作品保存在单独的文件中。你可以在__init__.py
{{1}}
有了这个,您可以使用您在其他文件中定义的类来组合您的实际gui。您可以将主类放在{{1}}或单独的文件中,看起来很方便