【问题标题】:Tkinter print specified item from list in loopTkinter 在循环中从列表中打印指定的项目
【发布时间】:2016-07-25 04:32:30
【问题描述】:

我的代码如下:

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”上时,我希望打印列表中的第二个对象)。我已经尝试将 variable 更改为 list[i] (仅用于测试是否可行)并创建第二个列表并附加到它,但没有运气。我的猜测是它以某种方式与 Tkniter 行为有关。

【问题讨论】:

标签: python tkinter


【解决方案1】:

使用您的代码:

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

【讨论】:

    【解决方案2】:

    你可以使用闭包:

    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

    【讨论】:

      猜你喜欢
      • 2014-01-03
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      相关资源
      最近更新 更多