我有一个包含一些图像的文件夹。我想在一个窗口中使用tkinter显示所有图像。每当我点击窗口中显示的任何图像时,我都需要显示图像的路径。我尝试使用for循环,但它打印所有图像文件路径。这是我试过的代码,
from Tkinter import *
import os
from PIL import ImageTk, Image
def getFileName(image):
print str(image)
gtk = Tk()
def showImages(folder):
for images in os.listdir(os.getcwd()):
if images.endswith("png"):
im = Image.open(images)
tkimage = ImageTk.PhotoImage(im)
imageButton = Button(gtk, image=tkimage, command=getFileName(images)
imageButton.image=tkimage
imageButton.pack()
gtk.mainloop()
有谁可以说我做错了什么?
答案 0 :(得分:2)
for images in os.listdir(os.getcwd()):
if images.endswith("png"):
im = Image.open(images)
tkimage = ImageTk.PhotoImage(im)
handler = lambda img = images: getFileName(img) #here modify
imageButton = Button(gtk, image=tkimage, command=handler)#here
imageButton.image=tkimage
imageButton.pack()
因为按钮按下回调是在没有参数的情况下运行的,如果我们这样做的话 需要传递额外的datato处理程序,它必须包装在一个对象中 通过延迟,记住额外数据并传递它 调用实际的处理程序。按下此按钮可运行该功能 由lambda生成,一个保留的间接调用层 来自封闭范围的信息。净效应是真实的 处理程序。 - <<编程Python>>第435页