作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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 的单选按钮:
生成的 GUI
编辑2:在尝试了上一个答案中的建议后,我得到了这个:
第二个结果
最佳答案
正如之前的答案所示,第一个错误是因为setGeometry() 需要一个 QRect。
如果要将小部件对齐到左上角,则必须在右侧设置一个拉伸(stretch)以将其压缩到左侧,然后将布局中小部件的对齐方式指向 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_())
关于python - 在组小部件内添加两个水平对齐的单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55923316/
我是一名优秀的程序员,十分优秀!