这感觉像是作弊,但确实有效: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_()
正如您所指出的,当设置了self.group.setExclusive(False)时,可以取消两个单选按钮的切换。
当self.group.setExclusive(True)时,只能设置一个单选按钮。
因此my_method只需调用self.group.setExclusive(False)即可取消两个单选按钮的设置,然后重置self.group.setExclusive(True)。
另外,我认为这一行的parent不应该设置为None:super(Form, self).__init__(parent = None)
因为如果一个非平凡的parent被发送到Form,您可能希望将该parent传递到QDialog.__init__。