2014-03-24 33 views
0

我有一個功能,比如說foo和它應該事件綁定事件綁定到窗口小部件不工作

def foo: 
     for x in widget_list: 
       widget.config(command = lambda: self.function(widget_list.index(x)) 

    def function(index): 
     do something here.... 
     print index 

窗列表包含按鈕,每當我點擊相應的按鈕,他們應該打印到IDLE是它們的索引,但是發生的是,我點擊的所有按鈕最終都會打印widget_list的最後一個索引。我猜測,雖然對於迭代,函數的參數也發生了變化,因此只保留最後一個索引。反正有沒有把前面的索引綁定到按鈕上?

+0

你猜對了,只有x的最後一個值用於你的lambda表達式。您可能會在此答案中找到解決辦法:http://stackoverflow.com/a/2295368 – FabienAndre

+0

最後。我一直在尋找這樣的解決方案大約一個星期,但我想我已經將這個問題歸類爲tkinter唯一的問題。無論如何,謝謝你,因爲我現在可以繼續工作。 :D – user3455382

+0

[通過Tkinter中的按鈕傳遞參數給函數,循環中的starnge行爲](http://stackoverflow.com/questions/18510403/passing-argument-to-a-function-via-a-按鈕功能於Tkinter的-starnge - 行爲 - 在-LOO) – FabienAndre

回答

0

最簡單的解決方法是,以確保您的拉姆達使用x當前值:

widget.config(command = lambda x=x: self.function(widget_list.index(x)) 

這迫使x是一個默認參數的功能,默認值是值在定義lambda的時候x