2014-02-28 56 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