Tkinter从循环列表中打印指定的项目

时间:2016-07-25 04:32:30

标签: python 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()

我想要实现的是,每次我的指针输入标签'Sample'时,都会打印指定的项目表单列表(即当我将鼠标悬停在标签'2'上时,我希望我的列表中的第二个对象被打印)。我尝试将变量更改为 list [i] (仅用于测试是否可行)并创建第二个列表并附加到它,但没有运气。我的猜测是它以某种方式与Tkniter行为有关。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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