2016-11-23 139 views
-2

它沒有編碼錯誤。它只是不顯示圖像。圖像不顯示?

class StartPage(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 
     image = tkinter.PhotoImage(file="NORTHERNICE (1).gif") 
     #../Documents/ 
     tkinter.Label(self, image=image).pack() 
     start = Button(self, text ="Choose a class", fg="#a1dbcd", bg="#383a39", command = lambda: controller.show_frame('PageOne'), font=("Gisha", 10)) 
     start.pack() 
+0

StartPage(tk.Frame):在代碼中,在縮進的定義塊之前 –

+0

假設'__init__'是類的構造函數,您應該包括類名和實例化類的代碼。 – gus27

+0

嗯即時通訊類似的新我將如何做到這一點?一位朋友幫我編碼 –

回答

0

Tkinter的是有點不同尋常的野獸,因爲這裏涉及到兩種語言 - Python的(在你編寫代碼),和Tcl(它承載Tk的用戶界面工具包)。在這兩種環境之間的交互中存在一些奇怪的現象,並且你可能遇到了最明顯的問題。具體來說,實際的PhotoImage對象(它完全基於Tcl一側)的生命週期和作爲其代理的Python PhotoImage對象之間沒有適當的同步。目前,如果Python對象被垃圾回收,Tcl對象會自動刪除,即使可能仍然存在對圖像的Tcl端引用。這樣做的結果是,您不能只使用局部變量(如代碼中的image)來引用圖像,因爲它將在函數結束時消失。將圖像存儲在全局變量中可能會有效,但可能會使圖像的壽命過長(即使使用該窗口的窗口已關閉,它也不會被刪除)。將它作爲一個實例變量存儲會起作用(self.image而不是image,就你的情況而言),因爲Python實例大概和它描述的Tcl小部件一樣長。另一個受歡迎的選項是將圖像存儲爲使用圖像的小部件的屬性。

+0

非常感謝,它的工作!不幸的是我不能'+1'這個答案 –