2012-10-30 127 views
3

我正在嘗試學習一些tkinter。我無法讓tkinter顯示圖標。我不知道它出錯的地方。它不會產生任何錯誤,並且它尊重圖像的大小,但它是不可見的。我在網上找到的所有東西都提示添加第二個參考,以防止從python進行垃圾收集,但不知何故,這並不是訣竅。 這裏是出了問題我的代碼的一部分:Tkinter標籤不顯示圖片

from Tkinter import * 
from PIL import Image, ImageTk 

class GUI: 

    def __init__(self, master): 

     frame = Frame(master) 
     frame.pack() 

     #status bar 
     self.bar = Frame(root, relief=RIDGE, borderwidth=5) 
     self.bar.pack(side=TOP) 

     self.iconPath = 'data/icons/size.png' 
     self.icon = ImageTk.PhotoImage(Image.open(self.iconPath)) 
     self.icon_size = Label(self.bar, image = self.icon) 
     self.icon_size.pack(side=LEFT) 

root = Tk() 


app = GUI(root) 

root.mainloop() 
+1

您的縮進被搞砸了。 –

+1

使用固定縮進,您的代碼適用於我 - 它在標籤(JPEG和PNG)中顯示圖像。 – Tim

+0

我修正了壓痕。代碼仍然不會爲我顯示圖像。 – user1787062

回答

6

當您添加光象或其他圖像對象到Tkinter的小工具,你必須保持自己的參考圖像對象。如果你不這樣做,圖像不會一直顯示出來。

決策here

+0

這解決了我的問題,但我全部退出投票。 – Elvisjames

2

出於某種原因(我完全不明白爲什麼),你必須錨定圖像對象到小工具,以便它可以顯示。因此,請嘗試以下改變你的代碼:

from Tkinter import * 
from PIL import Image, ImageTk 

class GUI: 

    def __init__(self, master): 

     frame = Frame(master) 
     frame.pack() 

     #status bar 
     self.bar = Frame(root, relief=RIDGE, borderwidth=5) 
     self.bar.pack(side=TOP) 

     self.iconPath = 'data/icons/size.png' 
     self.icon = ImageTk.PhotoImage(Image.open(self.iconPath)) 
     self.icon_size = Label(self.bar) 
     self.icon_size.image = self.icon # <== this is were we anchor the img object 
     self.icon_size.configure(image=self.icon) 
     self.icon_size.pack(side=LEFT) 

root = Tk() 


app = GUI(root) 

root.mainloop() 

祝您好運!

+2

「爲什麼」是因爲python垃圾收集會破壞圖像,除非有永久引用它。 –

1

對於所有未來的讀者,在我的情況下,問題與透明度有關。從圖像中刪除alpha通道將其修復。