微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何存储在for循环中生成的多个值以传递到tkinter按钮循环内的功能?

如何解决如何存储在for循环中生成的多个值以传递到tkinter按钮循环内的功能?

我有一个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()

运行时的外观如下:

Image of Program running

当按下按钮时,该按钮应打印出图像的文件名。 例如: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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。