TAGS :Viewed: 11 - Published at: a few seconds ago

[ Why it shows blank instead of picture in my Tkinter program? ]

I want to use Tkinter to display all the pictures in a specific directory, so I firstly code to show all the pictures from a given list

The code is:

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()

Environment: Mac OS 10.9, Python 2.7.5 How could I display all the pictures in the list?

Answer 1


  1. The code does not pack the label.
  2. Should keep the reference for the image.

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 use root directly. It would be better to use self.master.

root.destroy() at the last line cause TclError when closing the window. Remove the line.