如何使用PyQt4.uic.loadUi将第二个.ui加载到自己中?

4
我正在创建一个程序,需要加载一些 .ui 文件。第一个是 QMainWindow 类型的,其它的是 QWidget 类型的。
我无法弄清楚如何将第二个 UI(module.ui)加载到 self 中,并通过 self.<widget_name> 访问小部件。
请问如何实现这个功能?
from PyQt4 import QtGui
from PyQt4 import uic


class TestApp(QtGui.QMainWindow):
    def __init__(self):
        super(TestApp, self).__init__()

        # Load main window and the module
        uic.loadUi('main_window.ui', self)  # QMainWindow, contains testLayout, loads into self
        ui_module = uic.loadUi('module.ui')  # QWidget

        # Attach module to main window
        self.testLayout.addWidget(ui_module)  # this works fine

        # Edit widget in UI module
        self.label.setText('Hello')  # does not work (since self.label doesn't exist)

我可以这样做:
self.label = ui_module.label
self.label.setText('Hello')

...但我希望从一开始就将UI加载到“self”中。

如果我尝试将UI加载到“self”中,就会出现错误:

uic.loadUi('module.ui', self)
>>> QLayout: Attempting to add QLayout "" to TestApp "Form", which already has a layout
1个回答

3
你需要创建一个小部件来加载UI文件。
self.widget = QWidget(self)
uic.loadUi('module.ui', self.widget)

self.widget.label.setText('Hello')

话虽如此,如果您为另一个小部件创建了一个单独的类,可能会更好。

class MyWidget(QWidget):
    def __init__(self, **args, **kwargs):
        super(MyWidget, self).__init__(*args, **kwargs)
        uic.loadUi('module.ui', self)
        self.label.setText('Hello')

class TestApp(QtGui.QMainWindow):
    def __init__(self):
        ...
        self.widget = MyWidget(self)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接