嵌套布局会破坏,而不是自己

时间:2013-05-10 19:12:34

标签: python python-3.x pyqt pyqt4

我有一个简单的窗口,我希望在QHboxLayout中水平显示一个按钮和一个标签,然后在QGroupBoxQRadioButton QVBoxLayout垂直显示一些QVBoxLayout 。我试着将这两件作品放在# -*- coding: utf-8 -*- import sys from PyQt4 import QtGui from PyQt4 import QtCore class Application(QtGui.QWidget): """ Main application window """ def __init__(self): super(Application, self).__init__() self.initUI() def initUI(self): self.openBtn = QtGui.QPushButton("Open", self) self.label = QtGui.QLabel("This is a test label", self) self.hBox = QtGui.QHBoxLayout(self) self.hBox.addWidget(self.openBtn) self.hBox.addWidget(self.label) self.group = QtGui.QGroupBox("Style", self) self.radioBtn1 = QtGui.QRadioButton("Button 1", self.group) self.radioBtn2 = QtGui.QRadioButton("Button 2", self.group) self.radioLayout = QtGui.QVBoxLayout(self.group) self.radioLayout.addWidget(self.radioBtn1) self.radioLayout.addWidget(self.radioBtn2) self.group.setLayout(self.radioLayout) self.hBox2 = QtGui.QHBoxLayout(self) self.hBox2.addWidget(self.group) self.vBox = QtGui.QVBoxLayout(self) self.vBox.addLayout(self.hBox2) self.vBox.addLayout(self.hBox) self.setLayout(self.vBox) self.show() def main(): app = QtGui.QApplication(sys.argv) mainapp = Application() sys.exit(app.exec_()) if __name__ == '__main__': main() 中,但没有运气。我的代码的结果

QGroupBox

是这个

Bad result

我不明白# -*- coding: utf-8 -*- import sys from PyQt4 import QtGui from PyQt4 import QtCore class Application(QtGui.QWidget): """ Main application window """ def __init__(self): super(Application, self).__init__() self.initUI() def initUI(self): # self.openBtn = QtGui.QPushButton("Open", self) # self.label = QtGui.QLabel("This is a test label", self) # # self.hBox = QtGui.QHBoxLayout(self) # self.hBox.addWidget(self.openBtn) # self.hBox.addWidget(self.label) self.group = QtGui.QGroupBox("Style", self) self.radioBtn1 = QtGui.QRadioButton("Button 1", self.group) self.radioBtn2 = QtGui.QRadioButton("Button 2", self.group) self.radioLayout = QtGui.QVBoxLayout(self.group) self.radioLayout.addWidget(self.radioBtn1) self.radioLayout.addWidget(self.radioBtn2) self.group.setLayout(self.radioLayout) self.hBox2 = QtGui.QHBoxLayout(self) self.hBox2.addWidget(self.group) self.vBox = QtGui.QVBoxLayout(self) self.vBox.addLayout(self.hBox2) # self.vBox.addLayout(self.hBox) self.setLayout(self.vBox) self.show() def main(): app = QtGui.QApplication(sys.argv) mainapp = Application() sys.exit(app.exec_()) if __name__ == '__main__': main() 被打破的原因。它使用以下代码正确显示

{{1}}

产生

enter image description here

我运行安装了Python 3.3的Windows 8 64位机器。

1 个答案:

答案 0 :(得分:0)

您将self作为所有布局的父级。这有效地将该布局设置为窗口的主要布局(相当于setLayout)。你又这样做了......

基本上,在删除旧布局之前,您无法设置其他布局。您应该在控制台中看到几个警告。

发生的情况是,第一个布局(self.hBox)被设置为主布局,其余部分被忽略。但是,您的QGroupBox将窗口作为父级。所以它全局插入(左上)。但它没有布局,所以它不能调整它的大小,而且它缩小了。

如果从布局构建器中删除self,您将获得所需的结果。

顺便说一句,在使用布局时,您可以省略布局内部的窗口小部件/布局的parent设置。布局将设置小部件之间的父子关系。