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

Python 为什么在我的Tkinter程序中显示空白而不是图片?,python,image,macos,python-2.7,tkinter,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(

我想使用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 如何显示列表中的所有图片

  • 代码不包含标签
  • 应该保留图像的参考

  • def add_pic_面板(self,pic):
    img=ImageTk.PhotoImage(Image.open(pic))
    标签=标签(self.master,image=img)
    label.img=img#保留图像的参考。
    
    label.pack()#“保留图像的引用”是什么意思?(我是中国人,我不明白这句话。为什么在用img初始化标签后还需要打包?@kxxoling,删除
    label.img=img
    ,然后运行程序。你将看不到图像。@kxxoling,如果你不保留对images对象的引用,它将被垃圾收集。但是我不想引用img两次,其他任何一次都可以。)实现这一点的方法是什么?@kxxoling,打包包含框架不会自动打包包含的小部件。请考虑包含的小部件使用不同布局方法时的情况:
    grid
    place
    而不是
    pack
    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