我有一个简单的窗口,我希望在QHboxLayout
中水平显示一个按钮和一个标签,然后在QGroupBox
中QRadioButton
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
是这个
我不明白# -*- 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}}
产生
我运行安装了Python 3.3的Windows 8 64位机器。
答案 0 :(得分:0)
您将self
作为所有布局的父级。这有效地将该布局设置为窗口的主要布局(相当于setLayout
)。你又这样做了......
基本上,在删除旧布局之前,您无法设置其他布局。您应该在控制台中看到几个警告。
发生的情况是,第一个布局(self.hBox
)被设置为主布局,其余部分被忽略。但是,您的QGroupBox
将窗口作为父级。所以它全局插入(左上)。但它没有布局,所以它不能调整它的大小,而且它缩小了。
如果从布局构建器中删除self
,您将获得所需的结果。
顺便说一句,在使用布局时,您可以省略布局内部的窗口小部件/布局的parent
设置。布局将设置小部件之间的父子关系。