(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)
我的代码看起来像这样:
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)