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

时间:2017-07-31 04:46:45

标签: python user-interface pyqt maya

我目前正在为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)),我收到错误“无法连接信号点击()”

1 个答案:

答案 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}}或单独的文件中,看起来很方便