0

QHboxLayoutボタンとラベルを で水平に表示し、QGroupBoxいくつかをQRadioButtonで垂直に表示したい単純なウィンドウがありますQVBoxLayout。この 2 つのピースを入れようとしました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 ビット マシンを実行しています。

4

1 に答える 1

0

selfすべてのレイアウトに親として与えています。これにより、そのレイアウトがウィンドウのメイン レイアウトとして効果的に設定されます ( と同等setLayout)。そして、あなたはそれを繰り返します...

基本的に、古いレイアウトを削除する前に別のレイアウトを設定することはできません。コンソールにいくつかの警告が表示されます。

何が起こるかというと、最初のレイアウト ( self.hBox) がメイン レイアウトとして設定され、残りは無視されます。ただし、QGroupBox親としてウィンドウがあります。したがって、グローバルに挿入されます (左上)。しかし、レイアウトがないため、サイズを調整できず、縮小されています。

レイアウト コンストラクターから削除するselfと、目的の結果が得られます。

ちなみに、レイアウトを利用する場合、レイアウトのparent中に入るウィジェット・レイアウトの設定は省略できます。レイアウトは、ウィジェット間の親子関係を設定します。

于 2013-05-12T12:43:06.253 に答える