图片不会出现在我的tkinter文字小部件

时间:2016-11-30 02:37:29

标签: 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在我的代码的不同部分定义,我创建了一个男性衬衫类,但我觉得这个问题没有必要。请让我知道如何将我的图像传输到新窗口!

1 个答案:

答案 0 :(得分:0)

你至少有两个问题。

首先,您不应创建多个Toplevel实例或多次调用mainloop。如果您需要其他窗口,请创建mainloop的实例,不要再次拨打Toplevel

二,您的图像被垃圾收集,因为您使用局部变量来存储图像。有关详细信息,请参阅http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm

您还将标签放在根窗口而不是您正在创建的Label的实例中,因为您忽略了将T.insert(END, T)作为父级。

最后,我不知道你认为window_create应该做什么。您似乎正在尝试将小部件插入其中。 a)这没有意义,b)如果你想将一个小部件插入一个文本小部件,你必须使用Label方法,c)如果你的实际意图是将一个图像插入一个文本小部件,那么你不要#39; t需要image_create,您可以使用7/16, 02/11, 5/12 代替as.Date