QCheckBox状态改变PyQt4

时间:2016-07-18 12:58:45

标签: python qt pyqt qcheckbox

我正在尝试在PyQt4中实现一个系统,取消选中一个复选框会调用函数disable_mod并检查它会调用enable_mod。但即使状态正在改变复选框,也要调用它们开始的初始函数。对于这种情况,如果单击已经选中的框,它将始终保持调用disable_mod函数!我不明白为什么会这样?你们能帮帮我一点吗?这是我的代码:

CREATE INDEX foo ON test ((sec #>> '{sections,a}'));

1 个答案:

答案 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:
        ...