Слишком рано для создания изображения в NewWindow - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу отобразить изображение в новом окне, но получаю ошибку.

Это мой код ошибки

photo = PhotoImage(file='img/dog')
File "C:\Users\Hyojae\Anaconda3\lib\tkinter\__init__.py", line 3542, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "C:\Users\Hyojae\Anaconda3\lib\tkinter\__init__.py", line 3486, in __init__
raise RuntimeError('Too early to create image')
RuntimeError: Too early to create image

И это мой пример кода.

Буду признателен за вашу помощь.

from tkinter import *

def messageWindow():
    win = Tk()
    win.geometry('300x200')

    root.destroy()


    photo2 = PhotoImage(file="img/dog1.gif")
    label1 = Label(win, image=photo2)
    label1.grid(row=6)

    Button(win, text='OK', command=win.destroy).grid(row = 5, columnspan = 2)

    win.mainloop()

root = Tk()
photo = PhotoImage(file="img/dog2.gif")
label1 = Label(root, image=photo)
label1.pack()


Button(root, text='Bring up Message', command=messageWindow).pack()


root.mainloop()

1 Ответ

0 голосов
/ 22 ноября 2018

Вы получаете такую ​​область, потому что вы вызываете root.destroy перед загрузкой изображения в окно. Также вы не можете использовать два TK экземпляра, которые вы должны использовать Toplevel проверьте ссылку, чтобы лучше понять.

Кроме того, чтобы отобразить изображение в toplevel, вам нужно создать для него ссылку, чтобы оно не собиралось мусором Отображать изображение в окне Toplevel , которое я сделал таким образом label1.image = sub.

Я также использую image subsample, чтобы продемонстрировать, как изменить размер изображения sub = photo2.subsample(5, 5) проверьте эту ссылку , чтобы прочитать об этом

from tkinter import *

def messageWindow():
    win = Toplevel()
    win.geometry('300x200')

    root.withdraw() # THIS HIDE THE WINDOW


    photo2 = PhotoImage(file="img/dog1.gif")
    sub = photo2.subsample(5, 5)
    label1 = Label(win, image=sub)
    label1.image = sub
    label1.grid(row=6)

    Button(win, text='OK', command=win.destroy).grid(row = 5, columnspan = 2)



root = Tk()


photo = PhotoImage(file="img/dog1.gif")
sub1 = photo.subsample(3,3)
label1 = Label(root, image=sub1)
label1.pack()


B = Button(root, text='Bring up Message', command=messageWindow)
B.place(x=200, y=300)


root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...