如何解决如何存储在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()
运行时的外观如下:
当按下按钮时,该按钮应打印出图像的文件名。
例如: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 举报,一经查实,本站将立刻删除。