2014-12-03 35 views
0

我有幾個小部件將連接到一個需要額外參數的函數。Qt - 使用lambda參數連接槽

我發現我可以使用lambda函數來傳遞函數的一些參數。

問題是參數在循環中被替換,並且lambda函數僅傳遞最後一個集合。

繼承人我得到了什麼:

self.widgets是密鑰的詞典]爲組按鈕,使之短,讓我們說,它有2個按鈕[QToolButton],與他們的鑰匙:「戲'和'停止'。

def connections(self): 
    for group in self.widgets: 
     self.widgets[group].clicked.connect(lambda: self.openMenu(group)) 

    def openMenu(self,group): 
     print group 

但是不管我點擊哪個按鈕,它總是會打印相同的組,這是最後一次迭代的for循環。

有什麼辦法解決這個問題?

+0

可能重複(http://stackoverflow.com/questions/27208706/pyqt-connect-inside- for-loop-vs-separate-calls-results-in-different-behavior) – 2014-12-03 02:26:51

回答

2

問題是python的範圍規則&關閉。您需要capture組:

def connections(self): 
    for group in self.widgets: 
     self.widgets[group].clicked.connect(lambda g=group: self.openMenu(g)) 

    def openMenu(self,group): 
     print group 
的[PyQt的內部連接的環路與不同的行爲單獨調用結果]
+0

不知道這存在於python中。驚人。 – 2014-12-03 02:04:03