PyQt,Qt,一个处理许多项目的事件处理程序

时间:2010-02-07 08:35:44

标签: qt event-handling pyqt

我的表单上有几个复选框,我不想为每个复选框编写单独的事件处理程序,因为它们都将实现相同的逻辑。相反,我想只编写一个事件处理程序,它将知道已单击的复选框。

E.g。在Delphi中我可以这样使用它:

function click_handler(sender):
begin
    checked_box := sender.tag;
end;

这里我记得一些变量中的当前复选框编号(标记属性是在Delphi IDE中手动设置的)。

我搜索过但无法找到如何使用Qt实现此功能,因为事件处理程序没有sender参数。

我是这样实现的,但不方便:

# assign handlers (n assignments)
checkbox_1.clicked.connect(self.cb_1_click)
...
checkbox_<n>.clicked.connect(self.cb_<n>_click)

# separate handler for each check box (n functions, doing the same stupid work)
def cb_1_click:
    self.cb_click(sender=1)
...
def cb_<n>_click:
    self.cb_click(sender=n)

# main check box click logic (1 function)
def cb_click(sender):
    # do something common for all checkboxes

谢谢。

1 个答案:

答案 0 :(得分:3)

您可以在广告位中使用QObject::sender()来查找发出信号的人 另外,您可能需要查看QSignalMapper,它正是为解决这些问题而准备的。