将UI对象从文件调用到另一个

2024-04-25 15:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用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()”


Tags: 文件pytestself脚本uiinitdef
1条回答
网友
1楼 · 发布于 2024-04-25 15:16:57

一般来说,只要python路径上的所有文件都可用,就可以从其他文件加载类。可以使用import语句加载类。

典型模式的一个基本示例在磁盘上如下所示

mytool
|
+ -  __init__.py
+ - model_tab.py
+ - texture_tab.py
+ - tool_tab.py

其中,主工具是mytool,它在__init__.py中定义,而组件则位于其他文件中。可以使用from SomeModule import SomeClass模式导入类。这样就很容易把你的作品放在单独的文件里。您可以在__init__.py中构造导入

^{pr2}$

有了它,您就可以使用在其他文件中定义的类来组装实际的gui。您可以将主类放在__init__.py中,或者放在一个单独的文件中,这似乎很方便

相关问题 更多 >