0

我有一个简单的窗口,我想在 a 中水平显示一个按钮和一个标签,QHboxLayout然后在 a 中垂直显示QGroupBox一些。我试图把这两件放在一个但没有运气。我的代码的结果QRadioButtonQVBoxLayoutQVBoxLayout

# -*- 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 位机器。

4

1 回答 1

0

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

基本上,您不能在删除旧布局之前设置另一种布局。您应该在控制台中看到几个警告。

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

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

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

于 2013-05-12T12:43:06.253 回答