我正在PYQT 5中创建用户界面。它包括一个QGroupBox,其中包含几个QRadioButton。当发生切换事件时,我检查按钮并做一些事情。问题在于有两个已切换的事件,因为一个按钮处于打开状态,一个按钮处于关闭状态,因此我的代码始终运行两次。
我一直在从QGroupBox寻找事件。当我切换单选按钮时,应该只发生一次,而不是两次。
def __init__(self):
self.radioButton1.toggled.connect(self.update_stimulus)
self.radioButton2.toggled.connect(self.update_stimulus)
self.radioButton3.toggled.connect(self.update_stimulus)
def update_stimulus(self):
if self.radioButton1.isChecked():
print('1')
if self.radioButton2.isChecked():
print('2')
if self.radioButton3.isChecked():
print('3')
# Do stuff based on button positions
我尝试使用
self.groupBox.toggled.connect(self.update_stimulus)
但是只有在切换分组框本身时才有效。当单选按钮之一发生更改时,是否可以通过任何方式从组框获取信号,或者我是否必须找到某种方式来处理单选按钮的单个信号?
作为@ekhumoro explains,您可以将checked
参数添加到函数中,并且仅在其为True
时才进行处理:
def update_stimulus(self, checked):
if not checked:
return
if self.radioButton1.isChecked():
print('1')
if self.radioButton2.isChecked():
print('2')
if self.radioButton3.isChecked():
print('3')
但是请记住,如果您想在同一个分组框中具有不同的单选按钮“分组”,则这些都不能正常工作,因为它们都将被视为同一单个分组的一部分:所有Qt按钮(小工具)继承QAbstractButton
:QPushButton,QToolButton,QCheckBox和QRadioButton)的autoExclusive
property默认情况下处于关闭状态,但单选按钮除外。此属性使属于同一父窗口小部件的所有按钮自动互斥。
如果您在同一父级中需要不同的组,解决方案是使用autoExclusive
,它通过将每个按钮的成员资格限制为特定的组来扩展排他功能。
QButtonGroup
还可以从Designer中创建按钮组:只需选择至少两个将成为同一组成员的按钮,右键单击其中一个,然后转到“分配给按钮组”子菜单,然后选择“新建按钮组”。要将按钮添加到现有组,只需使用相同的上下文菜单,然后选择要将按钮添加到的组即可。