我正在用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)但是,只有当群盒本身被切换时,这才能起作用。当其中一个无线电按钮发生变化时,是否有任何方法从群组盒中获取信号,或者我是否必须找到某种方法来处理来自无线电按钮的独立信号?
发布于 2019-11-09 19:45:59
作为@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 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从设计器中也可以创建按钮组:只需选择至少两个将是同一组成员的按钮,右键单击其中一个按钮,转到“分配到按钮组”子菜单并选择“新建按钮组”。若要向现有组添加按钮,只需使用相同的上下文菜单并选择要将该按钮添加到的组。
https://stackoverflow.com/questions/58780920
复制相似问题