2016-07-25 4 views
0

Ich habe Code wie unten:Tkinter Druck Artikel aus der Liste in der Schleife angegeben

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() 

Was will ich erreichen, ist, dass jedes Mal meine Zeiger-Label eingeben ‚Sample‘, angegebene Element Form Liste wird gedruckt (dh wenn Ich schwebe über Label '2', ich möchte, dass das zweite Objekt aus meiner Liste gedruckt wird. Ich habe versucht, bereits Variable zu Liste [i] (nur für Tests, wenn es funktionieren würde) zu ändern und erstellen zweite Liste und Anhängen, aber ohne Glück. Meine Vermutung ist, dass es irgendwie mit Tkniter Verhalten verbunden ist.

+1

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

Antwort

1

Sie können Verwendung von Verschlüssen machen:

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) 

Dies schafft eine neue Callback-Funktion mit einem festen Wert für jedes Etikett. In Ihrem Code beziehen sich alle Rückrufe auf denselben variable, aber mit dieser Lösung hat jeder Rückruf seine eigene variable.

2

mit Ihrem Code:

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()