为什么它在我的Tkinter程序中显示空白而不是图片?

时间:2013-12-28 08:34:29

标签: python image macos python-2.7 tkinter

我想使用Tkinter显示特定目录中的所有图片,所以我首先编码显示给定列表中的所有图片

代码是:

import os

from Tkinter import *
from PIL import Image, ImageTk

class Application(Frame):
    def add_pic_panel(self, pic):
        img = ImageTk.PhotoImage(Image.open(pic))
        label = Label(root, image = img)
        print label
        return label

    def create_gui(self):
        pics = ['1.jpg', '2.jpg']
        for pic in pics:
            self.add_pic_panel(pic)
        pass

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.create_gui()

root = Tk()
app = Application(master=root)
app.mainloop()
root.destroy()

环境:Mac OS 10.9,Python 2.7.5 如何显示列表中的所有图片?

1 个答案:

答案 0 :(得分:5)

  1. 代码未打包标签。
  2. 应保留图像的参考。

  3. def add_pic_panel(self, pic):
        img = ImageTk.PhotoImage(Image.open(pic))
        label = Label(self.master, image=img)
        label.img = img # to keep the reference for the image.
        label.pack() # <--- pack
        return label
    

    BTW,add_pic_panel直接使用root。最好使用self.master

    关闭窗口时,最后一行的

    root.destroy()会导致TclError。删除该行。