2016-07-25 61 views
0

我有类似下面的代码:Tkinter的打印指定的项目从列表中循环

from tkinter import * 

root = Tk() 
root.title("sample program") 

def print_item_from_list(event): 
    print(variable) 

list = [1, 2, 3, 4, 5] 
seclist = [] 
print(list) 
for i in range(0,5): 
    variable = list[i] 
    sample = Label(text=variable) 
    sample.pack() 
    sample.bind('<Enter>', print_item_from_list) 

root.mainloop() 

我想实现的是,每次我的指针进入标签“样本”,指定项目表单列表打印(即当我将鼠标悬停在标签'2'上,我想从列表中选择第二个对象来打印)。我试图将变量更改为list [i](仅用于测试它是否可行)并创建第二个列表并添加到它,但没有运气。我的猜测是它以某种方式连接到Tkniter行为。

+1

http://stackoverflow.com/questions/14259072/tkinter-bind-function-with-variable-in-a-loop –

回答

1

您可以使用闭包:

for i in range(0,5): 
    variable = list[i] 
    sample = Label(text=variable) 
    sample.pack() 
    def connect_callback(variable): 
     sample.bind('<Enter>', lambda event:print(variable)) 
    connect_callback(variable) 

这将创建每个标签固定值一个新的回调函数。在你的代码中,所有的回调都是指相同的variable,但通过这种解决方案,每个回调函数都有自己的variable

2

与您的代码:

from tkinter import * 

root = Tk() 
root.title("sample program") 

def print_item_from_list(event): 
    print(event.widget.config("text")[-1]) 


list = [1, 2, 3, 4, 5] 
seclist = [] 
print(list) 
for i in range(0,5): 
    variable = list[i] 
    sample = Label(text=variable) 
    sample.pack() 
    sample.bind('<Enter>', print_item_from_list) 

root.mainloop()