繁体   English   中英

如何存储在 for 循环中生成的多个值以传递给 tkinter 按钮循环中的函数?

[英]How do I store multiple values generated in a for loop to pass to a funtion within a tkinter button loop?

我有一个 tkinter 窗口,它构建必要数量的按钮,相应地命名它们,然后显示相应的图像。 我希望按钮在按下时打印与图像对应的正确文件名。 我试过lambda ,但这只会通过最后一个参数。 我怎样才能做到这一点?

images是我正在使用的目录中的文件名列表。

def print_filename(i):
    print(i)


window = Tk()
window.title('Test Window')

for i in images:
    my_image = PhotoImage(master = window, file = i)
    label = Label(window, image = my_image)
    label.image=my_image
    label.grid(row = 1, column = c)
    b = Button(window, text=f'button {(c+1)}', command=lambda: print_filename(i))
    b.grid(row=0, column=c)
    c += 1

window.mainloop()

这是它运行时的样子:

程序运行图片

该按钮应在按下时打印出图像的文件名。 例如: pdf_1.png

Tkinter的文档:

Tkinter 的 Button 小部件不会将任何信息传递给回调。

对于像这样的简单情况,您可以使用 lambda 表达式作为 Tkinter 和回调函数之间的链接:

def callback(number):
   print(number) 

Button(text="one",   command=lambda: callback(1)).pack()
Button(text="two",   command=lambda: callback(2)).pack()
Button(text="three", command=lambda: callback(3)).pack()

使用上面提到的方式将图像的索引传递给print_filename

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM