【问题标题】:Adding two horizontally aligned radio buttons inside a group widget在组小部件中添加两个水平对齐的单选按钮
【发布时间】:2019-05-02 01:35:10
【问题描述】:

我正在尝试使用 PyQt5 创建一个 GUI,它将模拟一些数据并显示一些结果,但由于这是我第一次使用 PyQt5 构建一个 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'

这是我试过的代码:

from PyQt5.QtWidgets import *
import sys

class GroupBox(QWidget):

    def __init__(self):
        QWidget.__init__(self)

        self.setGeometry(20,20,900,700)
        self.setWindowTitle("Elevator Group Control System Simulator")
        layout = QGridLayout()
        self.setLayout(layout)

        groupbox = QGroupBox("Algorithm to use")
        groupbox.setCheckable(False)
        layout.addWidget(groupbox)

        hbox = QHBoxLayout()
        hbox.setGeometry(10,10,100,100)
        groupbox.setLayout(hbox)

        radiobutton = QRadioButton("Good Picker")
        hbox.addWidget(radiobutton)

        radiobutton = QRadioButton("Naive Picker")
        hbox.addWidget(radiobutton)


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

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

生成的图形用户界面

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

第二个结果

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

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

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

    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_())
    

    更新:

    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_())
    

    【讨论】:

    • 感谢您的回答,但我得到的结果并不是我想要的。组单选按钮的框架仍然占据整个窗口,这不是我想要的。我在我的问题中包含了结果。
    • @SaïdMaanan 更好地解释你自己,也许你想要获得的图像会有所帮助。
    • 我刚刚添加了一张我得到的结果的图片。
    • @SaïdMaanan 你得到的东西对我不起作用,因为它和我得到的一样,我要求你做的是添加你想要获得的图像,因为它不清楚大部头书。另一方面,我已经对我的代码添加了更新,这是你想要的吗?
    • 是的,这正是我想要的,非常感谢您的帮助。
    【解决方案2】:

    setGeometry() 需要 QRect 作为参数。将hbox.setGeometry(10,10,100,100) 替换为:

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

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

    【讨论】:

    • 它仍然不起作用,它提供了一个覆盖整个窗口的组单选按钮。
    猜你喜欢
    • 2014-03-17
    • 2012-08-31
    • 2014-07-27
    • 2020-12-20
    • 2017-10-28
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多