2016-11-30 24 views
-1

我一直在試圖讓我的tkinter子窗口中的圖像,當我運行此代碼時,我收到沒有錯誤,但我只在子窗口中獲得一系列數字。以下是一段我的代碼:圖片將不會出現在我的tkinter文本部件

from tkinter import * 
top = Tk('Outfit Randomizer') 

#gender entry 
L1 = Label(top, text = 'What is your gender? Type 1 for male and 2 for female') 
L1.grid(row = 0, column = 0) 
g = StringVar() 
E1 = Entry(top, bd = 5, textvariable = g) 
E1.grid(row = 0, column = 1) 

#submit function 
def submit(): 
    g.get() 
    gender = g.get() 
    if gender == '1': 
     root = Toplevel() 
     T = Text(root, height = 30, width = 90) 
     T.pack() 
     mhbs = random.choice([ms1, ms2]) 
     if mhbs == ms1: 
      photo = PhotoImage(file = "m.GIF") 
      label = Label(image = photo) 
      label.image = photo 
      label.pack() 
     if mhbs == ms2: 
      photo = PhotoImage(file = "m.GIF") 
      label = Label(image = photo) 
      label.image = photo 
      label.pack() 
     T.insert(END, T) 

#submit button 
MyButton1 = Button(top, text = 'Submit', width = 10, command = submit) 
MyButton1.grid(row = 3, column = 1) 

top.mainloop() 

MS1和MS2在我的代碼的不同部分定義,我創建一個男襯衫類,但我覺得這是不必要的這個問題。請讓我知道我能做些什麼來讓我的形象轉移到新窗口!

+0

請海h這個網站關於tk ter圖像不顯示。必須有至少100個相關的問題 –

+0

@BryanOakley我搜索了這個網站以及其他許多人,並有相關的問題,但我還沒有找到一個答案,在我的程序 – sammy

+0

@sammy該圖像不會出現,因爲該標籤不包裝。看看錯誤消息。如果你想要其他人修復你的代碼,請發佈一個[mcve],他們可以真正運行,看看會發生什麼。 – Goyo

回答

0

您至少有兩個問題。

首先,您絕不應創建多個Tk實例或多次調用mainloop。如果您需要另一個窗口,請創建一個Toplevel的實例,並且不要再次調用mainloop

二,您的圖像正在垃圾收集,因爲您正在使用本地變量來存儲圖像。欲瞭解更多信息,請參閱http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm

您還將標籤放在根窗口中,而不是您正在創建的Toplevel的實例,因爲您忽略將Label作爲父項。

最後,我不知道你認爲T.insert(END, T)應該做什麼。看起來你正試圖將一個小部件插入到它自己中。 a)這是沒有意義的,b)如果你想插入一個小部件到文本小部件中,你必須使用window_create方法,c)如果你的實際意圖是插入一個圖像到文本小部件中,那麼你不需要Label,您可以改用image_create

+0

我已經完成了您所建議的所有更改並更改了我的代碼,但我一直在收集垃圾收集的圖像!我在我的帖子中更新了我的代碼,如果您想查看是否可以找到我要出錯的地方。 – sammy