2017-10-08 86 views
0

我有QPushButton.i的列表希望能夠使列表中的所有按鈕以更簡單的方式發出信號。發送QpushButton對象列表中的每個n元素的每個信號

這裏是我的代碼:

def btn_click(self): 
self.menu_list[0].clicked.connect(lambda: self.add_cart(self.menu_list[0])) 
self.menu_list[1].clicked.connect(lambda: self.add_cart(self.menu_list[1])) 
self.menu_list[2].clicked.connect(lambda: self.add_cart(self.menu_list[2])) 
self.menu_list[3].clicked.connect(lambda: self.add_cart(self.menu_list[3])) 
self.menu_list[4].clicked.connect(lambda: self.add_cart(self.menu_list[4])) 
self.menu_list[5].clicked.connect(lambda: self.add_cart(self.menu_list[5])) 
def add_cart(self): 
print(b.text()) 
+0

@ekhumoro評論這聽起來像是爲'QSignalMapper'的任務。 – rbaleksandar

回答

1

你可以做到這一點在循環:

主要

def btn_click(self): 
    for button in menu_list: 
     button.clicked.connect(self.add_cart) 

def add_cart(self): 
    b = self.sender() 
    print(b.text()) 

替代

def btn_click(self): 
    for button in self.menu_list: 
     button.clicked.connect(lambda btn=button: self.add_cart(btn)) 

請注意,您需要btn =按鈕才能關閉,否則所有按鈕都會引用最後一個按鈕。

PS:更多解釋上主要方式閱讀以下

+0

'clicked'信號發送一個布爾型* checked *參數,它將打破你的'btn'參數。無論如何,在這種特殊情況下,我認爲最好直接連接到'add_cart',然後使用'b = self.sender()'來獲得發送信號的按鈕。 – ekhumoro

+0

謝謝,先生。但是它仍然不起作用。但是你給了我一個循環它的想法。 – vharay

+1

這根本不是問題,只需在lambda中添加通配符,像這樣:'lambda _,btn = button:...' – Yarick

相關問題