我们说MainWindow.ui
定义了MainWindow.py
的布局,其中MainWindow.py
看起来有点像这样:
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = uic.loadUi('MainWindow.ui')
MainWindow.ui
拥有两个(实际上是三个)小部件。一个简单的QLabel text_lbl
用于论证,一个空的QWidget sub_widget
。这两个小部件保存在central_widget
。
我们还有SubWidget.ui
。 SubWidget.ui
可以是任何东西,真的,但是我们说它拥有很多标签和旋转盒。 SubWidget.py
看起来很像MainWindow.py
,除了它包含很多信号和插槽:
class SubWidget(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = uic.loadUi('SubWidget.ui')
# A lot of interesting stuff here.
我想要做的是在SubWidget
的sub_widget中添加MainWindow
的实例。对我来说,显而易见的事情是将以下代码行添加到MainWindow.py
' __init__
:
from SubWidget import SubWidget # Though really this shouldn't be in
# __init__, but you get the idea.
self.ui.sub_widget = SubWidget()
这根本不起作用。我最终在主窗口的内容上渲染了SubWidget
,并抱怨MainWindow
已经有了布局,但我在所有摆弄中丢失了代码。
我如何实现这一目标?
编辑:我忘了提。self.ui.central_layout.addWidget(SubWidget())
直观地实现了我尝试做的事情,但是如果我决定在.ui文件中添加UI元素,那么它就不会起作用。
答案 0 :(得分:0)
如果您不能或出于任何原因而不想使用小部件促销,那么最明显的解决方案是让SubWidget
成为占位符小部件的子级
由于占位符小部件还没有孩子,你不能在Qt Designer中给它布局,所以你必须以编程方式完成所有这些:
layout = QtGui.QVBoxLayout(self.ui.empty_widget)
layout.setContentsMargins(0, 0, 0, 0)
self.ui.sub_widget = SubWidget()
layout.addWidget(self.ui.sub_widget)