uncheck radiobutton - PyQt4
在此代码示例中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | from PyQt4.QtGui import QDialog, QPushButton, QRadioButton, QHBoxLayout, QApplication, QButtonGroup import sys class Form(QDialog): def __init__(self, parent=None): super(Form, self).__init__(parent=None) button = QPushButton('Button') self.radiobutton1 = QRadioButton('1') self.radiobutton2 = QRadioButton('2') #self.group = QButtonGroup() #self.group.addButton(self.radiobutton1) #self.group.addButton(self.radiobutton2) #self.group.setExclusive(False) layout = QHBoxLayout() layout.addWidget(button) layout.addWidget(self.radiobutton1) layout.addWidget(self.radiobutton2) self.setLayout(layout) button.clicked.connect(self.my_method) def my_method(self): self.radiobutton1.setChecked(False) self.radiobutton2.setChecked(False) app = QApplication(sys.argv) form = Form() form.show() app.exec_() |
单击按钮时,我希望选中的radioButton未被选中,但这永远不会发生。如果取消注释注释行并运行代码,则可以取消选中radioButtons。但是出现另一个问题。因为该组不是唯一的,所以我可以将两个radioButtons都设置为选中的状态,这一定不能发生。
在一次只能选择一个按钮的情况下,如何解开按钮?
这感觉像是在作弊,但是有效:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import sys import PyQt4.QtGui as QtGui class Form(QtGui.QDialog): def __init__(self, parent=None): super(Form, self).__init__(parent) button = QtGui.QPushButton('Button') button.clicked.connect(self.my_method) self.radiobutton1 = QtGui.QRadioButton('1') self.radiobutton2 = QtGui.QRadioButton('2') layout = QtGui.QHBoxLayout() layout.addWidget(button) layout.addWidget(self.radiobutton1) layout.addWidget(self.radiobutton2) self.setLayout(layout) self.group = QtGui.QButtonGroup() self.group.addButton(self.radiobutton1) self.group.addButton(self.radiobutton2) def my_method(self): self.group.setExclusive(False) self.radiobutton1.setChecked(False) self.radiobutton2.setChecked(False) self.group.setExclusive(True) app = QtGui.QApplication(sys.argv) form = Form() form.show() app.exec_() |
您已经指出,设置
当
因此
PS。我认为
1 | super(Form, self).__init__(parent = None) |
因为如果将非平凡的
对于寻求解决此非常烦人的问题的简单方法的任何人,请将每个按钮连接到控制其他按钮的
只需将所需按钮的列表添加到
假设您在循环中实例化按钮,则可以轻松实现以下目的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | self.bg = QButtonGroup() self.bg.setExclusive(False) for button in list_of_buttons: self.bg.addButton(button) button.clicked.connect(self.uncheck_other_buttons) def uncheck_other_btns(self): for button in self.bg.buttons(): # returns the list of all added buttons if self.sender() != button: # in PyQt5, button.objectName() fails if name isn't set, # instead, simply check that the signal sender() object # is not the same object as the clicked button button.setChecked(False) # then set all other buttons to be unchecked |