我正在尝试在python的“顶级”窗口中添加图像,但是似乎无法正常工作。
我尝试使用画布,并在堆栈溢出时执行其他一些步骤。我还没有尝试过的一件事是使用类, init 和self,但是我并没有真正理解这一点,希望我能在不使用self的情况下实现自己的目标。和类似的东西:D。
def pika():
def close():
win.destroy()
win = Toplevel()
win.geometry("150x150")
win.title("I CHOOSE U")
yellowb = Label(win, bg = 'yellow', fg = 'yellow', padx = 100, pady = 100)
yellowb.pack()
poke = PhotoImage(file = "pika.gif")
pika = Label(image = poke) # REEEEEEEEEEEEEEEEEE IT NO WORKEY
pika.grid(row = 0, column=1, padx = 10, pady = 10)
button = Button(win, text = "Close", command = close)
button.place(x=49, y=130)
在这里显示主要的Windows代码
win = Tk()
win.geometry("290x200")
win.title('Error')
text1 = Label(win, bg= "Cyan", fg = 'Teal', padx = 50, pady = 75, text = '#hash error',
font = ('Times', '40', 'bold'))
text1.place(x=win.winfo_width() / 2, y=win.winfo_width() / 2)
button1 = Button(win, text = 'green', command = green)
button1.place(x=40, y=160)
button2 = Button(win, text = 'blue', command = blue)
button2.place(x=90, y=160)
button3 = Button(win, text = "red", command = red)
button3.place(x=130, y=160)
button4 = Button(win, text = 'yellow', command = yellow)
button4.place(x=170, y=160)
button5 = Button(win, text = "orange", command = orange)
button5.place(x=229, y=160)
eggs = PhotoImage(file = "pika.gif")
eggpic = Button(win, image = eggs, bg = 'Cyan', fg = 'Cyan', command = pika)
eggpic.place(x=100, y=20)
def close():
win.destroy()
closebut = Button(win, text='close', command = close)
closebut.place(x=0, y=0)
当我单击一个按钮并打开一个新窗口时,窗口的背景为黄色,并且一切正常,但是图像未出现在窗口中,并且在主窗口中出现了一个图像大小的白框。 tk窗口。
答案 0 :(得分:1)
您可能有两个问题:
首先:每个小部件都需要父级。如果您不使用它,则tkinter
将小部件分配到主窗口。
您在Label(image = poke)
中遇到了这个问题,因为您在{p>中忘记了win
pika = Label(win, image=poke)
这就是为什么在主窗口而不是顶层窗口中看到矩形的原因。
第二:PhotoImage
中存在错误。 Garbage Collector
在函数中创建并分配给局部变量后,将其从内存中删除。然后您可以看到空白图像。
您必须将PhotoImage
分配给全局变量或分配给函数中的其他小部件。
分配给其他小部件的热门解决方案:
poke = PhotoImage(file = "pika.gif")
pika = Label(win, image=poke)
pika.photo = poke # <-- assign PhotoImage to other widget too
更多:PhotoImage