(PyQT) 当许多元素连接到回调函数时,如何获取哪个元素触发了回调函数?

(PyQT) How do I get which element triggered a callback function when many elements are connected to that callback function?

我的代码看起来像这样:

for i in range(num_boxes):
    box = QCheckBox(self.row)
    box.setObjectName(f"{i}")
    box.setText(f"{i}")
    box.stateChanged.connect(checkbox_callback)

所以我动态生成复选框,然后 link 它们全部生成一个回调函数,看起来像这样:

def checkbox_callback(state):
    print(state)

我现在想知道如何检查我的哪个复选框触发了回调函数,因为据我所知,我只能获得触发事件,而不是盒子本身,这对我来说是强制性的。

我希望我说清楚了并提前致谢。

最基本的方法是将小部件作为回调的一部分传递。

from functools import partial

for i in range(num_boxes):
    box = QCheckBox(self.row)
    box.setObjectName(f"{i}")
    box.setText(f"{i}")
    box.stateChanged.connect(partial(checkbox_callback, widget=box))

def checkbox_callback(state, widget):
    print(widget.text(), state)

或者,您可以将小部件子类化以生成自定义信号。

class MyCheckBox(QCheckBox):

    customStateChanged = Signal(QCheckBox, Qt.CheckState)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.stateChanged.connect(self.onStateChange)
    
    @Slot(Qt.CheckState)
    def onStateChange(self, checkState):
        self.customStateChanged.emit(self, checkState)