在此代码示例中:
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_()
当单击按钮时,我希望选定的单选按钮未被选中,但这种情况从未发生过。如果我取消注释注释行并运行代码,那么我可以取消选中 radioButtons。但是另一个问题出现了。因为该组不是排他性的,所以我可以将两个单选按钮都设置为选中某些不能发生的事情。
当一次只能选择一个按钮时,我应该怎么做才能取消选中按钮?
最佳答案
这感觉像是作弊,但确实有效:
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__
。
关于python - 取消选中单选按钮 - PyQt4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689909/