【发布时间】:2020-10-05 07:59:48
【问题描述】:
我在 pyQt5 的 QButtonGroup 中使用了一些 QRadioButtons。我希望用户能够选择一个独占选项或不选择,所以如果他不小心单击了一个单选按钮,他应该能够再次单击它以取消选中它。
我目前的方法是将 clicked 方法连接到检查按钮状态的自定义函数,但我不知道如何以简单的方式执行此操作,而不使用可疑的点击计数器。
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QHBoxLayout, QButtonGroup
import sys
class MainWindow(QWidget):
def __init__(self):
super().__init__()
# Radio buttons
self.group = QButtonGroup()
self.b1 = QRadioButton()
self.group.addButton(self.b1)
self.b1.clicked.connect(lambda: self.radioButtonClicked())
self.b2 = QRadioButton()
self.group.addButton(self.b2)
self.b2.clicked.connect(lambda: self.radioButtonClicked())
# Layout
self.layout = QHBoxLayout()
self.layout.addWidget(self.b1)
self.layout.addWidget(self.b2)
self.setLayout(self.layout)
def radioButtonClicked(self):
if self.sender().isChecked():
self.sender().setAutoExclusive(False)
self.sender().setChecked(False) # This is not working, as it fires on the first click
self.sender().setAutoExclusive(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
【问题讨论】:
-
对不起,你为什么不用QCheckBox?
-
@S.Nick 用户应该只能选择一个选项(或无)。我不知道这是否可以通过 QCheckBox 实现(我猜是这样),但即使是这样,我认为用户倾向于将检查排他性与圆形单选按钮联系起来,而不是方形复选框。当然,这只是一种意见,我愿意讨论。
标签: python pyqt qradiobutton