2010-02-07 123 views
0

我在窗体上有几个复选框,我不想为每个项目编写单独的事件处理程序,因为它们都将实现相同的逻辑。相反,我想写一个事件处理程序,它将知道点击了哪个复选框。PyQt,Qt,一个事件处理程序,处理很多项目

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 

谢谢。

回答

3

您可以在slots中使用QObject::sender()来找出谁发出了信号。
另外,您可能想要查看QSignalMapper,这正是为了解决这些问题。