在此代码示例中:
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_()
单击按钮时,我希望选中的单选按钮未选中,但这种情况永远不会发生。如果取消注释行并运行代码,则可以取消选中单选按钮。但另一个问题发生了。因为组不是独占的,所以我可以将两个单选按钮都设置为选中,这是不允许发生的。
当一次只能选择一个按钮时,我应该怎么做才能打开按钮?
这感觉像是作弊,但确实有效:
正如您所指出的,当设置了
self.group.setExclusive(False)
时,可以取消两个单选按钮的切换。当
self.group.setExclusive(True)
时,只能设置一个单选按钮。因此
my_method
只需调用self.group.setExclusive(False)
即可取消两个单选按钮的设置,然后重置self.group.setExclusive(True)
。另外,我认为这一行的
parent
不应该设置为None
:因为如果一个非平凡的
parent
被发送到Form
,您可能希望将该parent
传递到QDialog.__init__
。相关问题 更多 >
编程相关推荐