Добавление изображений в окно верхнего уровня - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь добавить изображение в окно верхнего уровня в python, но, похоже, я не могу заставить его работать.

Я пытался использовать холсты и выполнять некоторые другие действия при переполнении стека. Одна вещь, которую я не пробовал, - это использовать класс init и себя, но я не очень понимаю это и надеюсь, что смогу достичь своей цели без использования себя. и тому подобное: 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)

Вот код главного окна

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)

Когда я нажимаю кнопку, и она открывает новые окна, bg окон становится желтым и все, как задумано, однако изображение не появляется на окнах, а белая рамка размером с изображение появляется в главном окне. Окно ТК.

https://imgur.com/a/XU5m3Se

1 Ответ

1 голос
/ 07 июля 2019

У вас может быть две проблемы:


Первый: Каждый виджет нуждается в родителе. Если вы не используете его, то tkinter привязывает виджет к главному окну.

И у вас есть эта проблема в Label(image = poke), потому что вы забыли 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

Подробнее: Фотоизображение

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