Python 嵌套布局被破坏,而不是它们自己
我有一个简单的窗口,我想在Python 嵌套布局被破坏,而不是它们自己,python,python-3.x,pyqt,pyqt4,Python,Python 3.x,Pyqt,Pyqt4,我有一个简单的窗口,我想在QHboxLayout中水平显示一个按钮和一个标签,然后在QVBoxLayout中垂直显示一些QRadioButton。我试着将这两个部分放到QVBoxLayout中,但没有成功。我的代码的结果 # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui from PyQt4 import QtCore class Application(QtGui.QWidget): """ Main appli
QHboxLayout
中水平显示一个按钮和一个标签,然后在QVBoxLayout
中垂直显示一些QRadioButton
。我试着将这两个部分放到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
坏了。它自己正确显示,代码如下
# -*- 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()
产生
我运行安装了Python 3.3的Windows 8 64位计算机。您将
self
作为所有布局的父级。这将有效地将该布局设置为窗口的主布局(相当于setLayout
)。你再这样做一次
基本上,在删除旧布局之前,不能设置其他布局。您应该在控制台中看到几个警告
发生的情况是,第一个布局(self.hBox
)被设置为主布局,其余的被忽略。但是,您的QGroupBox
将窗口作为父窗口。所以它是全局插入的(左上角)。但是它没有布局,所以它不能调整它的大小,而且它已经缩小了
如果从布局构造函数中删除self
,将获得所需的结果
顺便说一句,在使用布局时,您可以省略将进入布局的小部件/布局的父级设置。布局将设置小部件之间的父子关系