在组窗口小部件中添加两个水平对齐的单选按钮

时间:2019-04-30 14:38:51

标签: python python-3.x pyqt pyqt5

我正在尝试使用PyQt5创建一个GUI,它将模拟一些数据并显示一些结果,但是由于这是我第一次使用PyQt5构建一个GUI,所以我发现很难在左上角水平对齐两个单选按钮GUI。

我尝试了以下代码,但它给了我以下错误:

?

这是我尝试的代码:

Traceback (most recent call last):
File "example6.py", line 30, in <module>
screen = GroupBox()
File "example6.py", line 19, in __init__
vbox.setGeometry(10,10,100,100)
TypeError: setGeometry(self, QRect): argument 1 has unexpected type 'int'

编辑:即使在第一个答案中应用了建议之后,它仍然为我提供了覆盖整个GUI的一组单选按钮:

生成的GUI

编辑2:尝试了最后一个答案中的建议后,我得到了:

第二个结果

2 个答案:

答案 0 :(得分:0)

setGeometry()期望以QRect作为参数。将hbox.setGeometry(10,10,100,100)替换为:

hbox.setGeometry(QRect(10,10,100,100))

请注意,这将需要在您的导入中添加from PyQt5.QtCore import *

答案 1 :(得分:0)

如上一个答案所示,第一个错误是因为 setGeometry()需要QRect。

如果要将小部件对齐到左上角,则必须在右侧设置拉伸以将其压缩到左侧,然后将布局中的小部件的对齐方式指向Qt :: AlignTop。< / p>

from PyQt5 import QtCore, QtWidgets


class GroupBox(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(QtCore.QRect(20, 20, 900, 700))
        self.setWindowTitle("Elevator Group Control System Simulator")
        layout = QtWidgets.QGridLayout(self)
        groupbox = QtWidgets.QGroupBox("Algorithm to use", checkable=False)
        layout.addWidget(groupbox)

        hbox = QtWidgets.QHBoxLayout()
        groupbox.setLayout(hbox)
        good_radiobutton = QtWidgets.QRadioButton("Good Picker")
        naive_radiobutton = QtWidgets.QRadioButton("Naive Picker")
        hbox.addWidget(good_radiobutton, alignment=QtCore.Qt.AlignTop)
        hbox.addWidget(naive_radiobutton, alignment=QtCore.Qt.AlignTop)
        hbox.addStretch()


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    screen = GroupBox()
    screen.show()
    sys.exit(app.exec_())

enter image description here

更新:

from PyQt5 import QtCore, QtWidgets


class GroupBox(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(QtCore.QRect(20, 20, 900, 700))
        self.setWindowTitle("Elevator Group Control System Simulator")
        layout = QtWidgets.QGridLayout(self)
        groupbox = QtWidgets.QGroupBox("Algorithm to use", checkable=False)
        layout.addWidget(groupbox)

        hbox = QtWidgets.QHBoxLayout()
        groupbox.setLayout(hbox)
        good_radiobutton = QtWidgets.QRadioButton("Good Picker")
        naive_radiobutton = QtWidgets.QRadioButton("Naive Picker")
        hbox.addWidget(good_radiobutton, alignment=QtCore.Qt.AlignTop)
        hbox.addWidget(naive_radiobutton, alignment=QtCore.Qt.AlignTop)
        hbox.addStretch()
        layout.setColumnStretch(1, 1)
        layout.setRowStretch(1, 1)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    screen = GroupBox()
    screen.show()
    sys.exit(app.exec_())

enter image description here