Это похоже на читерство, но оно работает:
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)
.
PS.Я думаю, что parent
не следует устанавливать на None
в этой строке:
super(Form, self).__init__(parent = None)
, так как если нетривиальный parent
отправляется на Form
, вы, вероятно, захотите передать это parent
на QDialog.__init__
.