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