2016-07-25 62 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()