当其中的一个单选按钮发生变化时,我可以从 QGroupbox 获得信号吗?
Can I get a signal from a QGroupbox when one of the radiobuttons in it is changed?
我正在 PYQT 5 中制作一个用户界面。它包括一个包含多个 QRadioButton 的 QGroupBox。当有一个切换事件时,我检查按钮并做一些事情。问题是有两个切换事件,因为一个按钮打开一个关闭,所以我的代码总是 运行 两次。
我一直在寻找来自 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)
但这只有在组框本身被切换时才有效。当其中一个单选按钮发生变化时,是否有任何方法可以从组框中获取信号,或者我是否必须找到某种方法来处理来自单选按钮的单独信号?
作为,你可以在函数中添加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')
不过请记住,如果您想在同一组框中使用不同的单选按钮 "groups",其中的 none 将正常工作,因为它们都将被视为同一组:所有 Qt 按钮(继承 QAbstractButton
的小部件:QPushButton、QToolButton、QCheckBox 和 QRadioButton)都有一个 autoExclusive
property 默认情况下关闭,单选按钮除外。 属性 使属于同一父小部件的所有按钮自动独占。
如果您需要同一父项中的不同组,解决方案是使用 QButtonGroup
,它通过将每个按钮的成员资格限制为特定组来扩展独占功能。
def __init__(self):
# ...
self.buttonGroupA = QtWidgets.QButtonGroup()
self.buttonGroupA.addButton(self.radioButton1)
self.buttonGroupA.addButton(self.radioButton2)
self.buttonGroupA.addButton(self.radioButton3)
self.buttonGroupA.buttonToggled[QtWidgets.QAbstractButton, bool].connect(self.update_stimulusA)
self.buttonGroupB = QtWidgets.QButtonGroup()
self.buttonGroupB.addButton(self.radioButton4)
self.buttonGroupB.addButton(self.radioButton5)
self.buttonGroupB.addButton(self.radioButton6)
self.buttonGroupB.buttonToggled[QtWidgets.QAbstractButton, bool].connect(self.update_stimulusB)
def update_stimulusA(self, btn, checked):
if not checked:
return
# do something with group A
def update_stimulusB(self, btn, checked):
if not checked:
return
# do something with group B
也可以从 Designer 创建按钮组:只需 select 至少两个属于同一组的按钮,右键单击其中一个按钮,转到 "Assign to button group"子菜单和 select "New button group"。要将按钮添加到现有组,只需使用相同的上下文菜单并选择要将该按钮添加到的组。
我正在 PYQT 5 中制作一个用户界面。它包括一个包含多个 QRadioButton 的 QGroupBox。当有一个切换事件时,我检查按钮并做一些事情。问题是有两个切换事件,因为一个按钮打开一个关闭,所以我的代码总是 运行 两次。
我一直在寻找来自 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)
但这只有在组框本身被切换时才有效。当其中一个单选按钮发生变化时,是否有任何方法可以从组框中获取信号,或者我是否必须找到某种方法来处理来自单选按钮的单独信号?
作为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')
不过请记住,如果您想在同一组框中使用不同的单选按钮 "groups",其中的 none 将正常工作,因为它们都将被视为同一组:所有 Qt 按钮(继承 QAbstractButton
的小部件:QPushButton、QToolButton、QCheckBox 和 QRadioButton)都有一个 autoExclusive
property 默认情况下关闭,单选按钮除外。 属性 使属于同一父小部件的所有按钮自动独占。
如果您需要同一父项中的不同组,解决方案是使用 QButtonGroup
,它通过将每个按钮的成员资格限制为特定组来扩展独占功能。
def __init__(self):
# ...
self.buttonGroupA = QtWidgets.QButtonGroup()
self.buttonGroupA.addButton(self.radioButton1)
self.buttonGroupA.addButton(self.radioButton2)
self.buttonGroupA.addButton(self.radioButton3)
self.buttonGroupA.buttonToggled[QtWidgets.QAbstractButton, bool].connect(self.update_stimulusA)
self.buttonGroupB = QtWidgets.QButtonGroup()
self.buttonGroupB.addButton(self.radioButton4)
self.buttonGroupB.addButton(self.radioButton5)
self.buttonGroupB.addButton(self.radioButton6)
self.buttonGroupB.buttonToggled[QtWidgets.QAbstractButton, bool].connect(self.update_stimulusB)
def update_stimulusA(self, btn, checked):
if not checked:
return
# do something with group A
def update_stimulusB(self, btn, checked):
if not checked:
return
# do something with group B
也可以从 Designer 创建按钮组:只需 select 至少两个属于同一组的按钮,右键单击其中一个按钮,转到 "Assign to button group"子菜单和 select "New button group"。要将按钮添加到现有组,只需使用相同的上下文菜单并选择要将该按钮添加到的组。