Python 在PyQt5中,如果您有多个复选框,如果没有选中某个复选框,但选中了任何复选框,如何指向函数?
我有一个使用PyQt5开发的程序,其中有6个QComboxes可供选择,然后根据这些选择,您可以进一步缩小数据范围。为清楚起见,它看起来如下所示: 如果某些东西属于“弱点”类别,我希望用户可以选择将其从最终选择过程中删除,以防初始结果过于狭窄 问题就在这里: 最终计算基于选中的复选框。为了确保这在GUI中得到反映,每当更改组合框时,我都会执行以下操作:Python 在PyQt5中,如果您有多个复选框,如果没有选中某个复选框,但选中了任何复选框,如何指向函数?,python,pyqt5,Python,Pyqt5,我有一个使用PyQt5开发的程序,其中有6个QComboxes可供选择,然后根据这些选择,您可以进一步缩小数据范围。为清楚起见,它看起来如下所示: 如果某些东西属于“弱点”类别,我希望用户可以选择将其从最终选择过程中删除,以防初始结果过于狭窄 问题就在这里: 最终计算基于选中的复选框。为了确保这在GUI中得到反映,每当更改组合框时,我都会执行以下操作: 将QStackedWidgets更改为“停用”标签 根据组合框中的类型数据确定优势和劣势 取消选中所有复选框,并将相应的复选框标记为选中 代码
#deactivate all stacks
for t in range(0,18):
str_type0 = self.value[t].lower()[0:3]
str_stack0 = 'self.str_'+str(str_type0)
eval(str_stack0).setCurrentIndex(0)
weak_type0 = self.value[t].lower()[0:3]
weak_stack0 = 'self.weak_'+str(weak_type0)
eval(weak_stack0).setCurrentIndex(0)
#strong loop
for t in range(0,len(self.r)):
str_type = self.value[self.r[t]].lower()[0:3]
str_stack = 'self.str_'+str(str_type)
eval(str_stack).setCurrentIndex(1)
#weak loop
for t in range(0,len(self.q)):
weak_type = self.value[self.q[t]].lower()[0:3]
weak_stack = 'self.weak_'+str(weak_type)
eval(weak_stack).setCurrentIndex(1)
#set all checkboxes as checked if currently shown in stack
for t in range(0,18):
checkstr0= self.value[t].lower()[0:3]
checkstr1='self.weak_'+str(checkstr0)+'_act'
eval(checkstr1).setChecked(False)
weak_stack1 = 'self.weak_'+str(checkstr0)
weak_stack1 = eval(weak_stack1)
if weak_stack1.currentIndex() == 1:
eval(checkstr1).setChecked(True)
else: continue
这很好,即使它有点笨重也能工作(目标是让它工作,然后让它以后高效地工作)。问题在于,更改复选框会触发执行所有结果计算的函数,但由于多个复选框同时更改,甚至只更改一个复选框,因此会多次触发此函数。这是对计算的巨大浪费
我想到了一些解决办法。我认为解决这个问题的最好方法可能是运行函数,而不是在任何特定复选框更改时运行,而是在发生更改时运行。比如:
如果有(checkbox.checkState()==已更改):执行某些操作。
我不确定这是否是一个好的解决方案,或者如何做到这一点
欢迎提出任何意见。提前谢谢 在我继续思考问题的同时,我找到了答案。问题是每次更改时它都会发出信号,这在程序自行配置时是一个可怕的数量 显而易见但简单的解决方案是将复选框从: 复选框.stateChanged.connect(函数) 到 复选框。按下。连接(功能) 这样,复选框信号只有在我在程序中实际按下时才会发出。希望这将能够帮助任何其他人谁在未来遇到同样的问题