python tkinter在目录中显示图像

时间:2017-03-09 13:44:53

标签: python tkinter

我有一个包含一些图像的文件夹。我想在一个窗口中使用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()

有谁可以说我做错了什么?

1 个答案:

答案 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页