2010-02-07 163 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,這正是爲了解決這些問題。