2014-02-28 53 views
0

的Tkinter允許您將功能分配給這樣的按鈕:創建的函數隨機數

but = Button(master,text="Press Here",command=press_B1).pack() 

其中press_B1是定義的函數。

我必須採用n個元素的數組,併爲每個元素創建一個按鈕,如果按例如第一個按鈕,它會打印數組的第一個元素。 這很簡單,如果我有一個定義數量的元素,但未定義的元素,我不知道該怎麼做。

如果我沒有解釋清楚我想做的事:

arr = ["a","b","c"] #random number of elements 
for i in range(len(array)): 
    but = Button(master,text="Press Here",command=?).pack()   

最後我應該有3個按鈕,如果我按了第一個,蟒蛇應打印「一個」

+3

http://stackoverflow.com/questions/6920302/passing-argument-in-python-tkinter-button-command可能會有所幫助。 – geoffspear

+0

但我不知道該傳遞給函數,因爲它取決於我按下的按鈕 – Ermans

+1

@Ermans:您可以嘗試傳遞'arr [i]'作爲第一步。 –

回答

0

鑑於你的例子,如果你需要print語句(Python 2.x),你可能可以在循環中使用函數定義;

arr = ["a","b","c"] #random number of elements 
for i in range(len(arr)): 
    def f(val=arr[i]): 
     print val 
    but = Button(None,text="Press Here",command=f).pack() 

,否則你可以使用一個lambda代替:

import sys 
arr = ["a","b","c"] #random number of elements 
for i in range(len(arr)): 
    lam = lambda val=arr[i]: sys.stdout.write("%s\n"%val) 
    but = Button(None,text="Press Here",command=lam).pack() 
+0

這兩個解決方案都不起作用,它們只是打印數組的最後一個元素。我正在使用Python 2.7 – Ermans

+0

@Ermans - 你是對的我忘記了需要使用默認值,更新應該現在工作 – jmetz

+0

它的工作原理,非常感謝。 – Ermans