我正在尝试在PyQt4中实现一个系统,取消选中一个复选框会调用函数disable_mod并检查它会调用enable_mod。但即使状态正在改变复选框,也要调用它们开始的初始函数。对于这种情况,如果单击已经选中的框,它将始终保持调用disable_mod函数!我不明白为什么会这样?你们能帮帮我一点吗?这是我的代码:
CREATE INDEX foo ON test ((sec #>> '{sections,a}'));
答案 0 :(得分:3)
问题是您只在初始化期间连接了stateChanged
复选框信号一次。在复选框状态发生变化后,您不会断开信号并将其重新连接到正确的插槽。
您需要将stateChanged
信号连接到中间插槽,该插槽将根据复选框状态决定调用哪个函数。由于您为多个复选框使用相同的插槽,因此最好也可以将复选框传递到插槽。
from functools import partial
def init(self):
...
for tmp in list_of_checkboxes:
enable_slot = partial(self.enable_mod, tmp)
disable_slot = partial(self.disable_mod, tmp)
tmp.stateChanged.connect(lambda x: enable_slot() if x else disable_slot())
def enable_mod(self, checkbox):
print "ENABLE_TEST"
print checkbox.isChecked()
def disable_mod(self, checkbox):
print "DISABLE_TEST"
print checkbox.isChecked()
或者,由于我们现在将复选框传递给插槽,您可以使用单个插槽并检查插槽内的复选框状态
def init(self):
...
for tmp in list_of_checkboxes:
slot = partial(self.enable_disable_mod, tmp)
tmp.stateChanged.connect(lambda x: slot())
def enable_disable_mod(self, checkbox):
if checkbox.isChecked():
...
else:
...