Как добавить фон в виде изображений в несколько окон, связанных с одним проектом, используя метку - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу добавить изображение в качестве фона для моих окон в Tkinter Python, которые связаны друг с другом с помощью кнопок. Когда я запускаю код по умолчанию, мое первое окно открывается с изображением, и при нажатии кнопки в другое окно оно также открывается, но когда я нажимаю кнопку «Назад» в первом окне, это вызывает ошибку pyimage3 does not exists.

tkinter.TclError: изображение "pyimage3" не существует

Я пробовал решения, размещенные по вышеуказанной ссылке, но ни одно из них не помогло мне.

from tkinter import *


def win1():

    global window1
    global window2

    def goto2():
        window1.withdraw()
        win2()

    window1=Tk()
    window1.title('Window1')
    window1.geometry('300x300')


    img1=PhotoImage(file='wood.png')
    l1=Label(window1,image=img1,width=160,height=300)

    l1.image = img1

    l1.place(x=0,y=0)


    b=Button(window1,text='go to 2',command=goto2)
    b.pack()
    window1.mainloop()


def win2():
    global window2
    global window1

    def goto1():
        window2.withdraw()
        win1()



    window2=Toplevel()
    window2.title('Window2')
    window1.geometry('300x300')

    img2=PhotoImage(file='for.png')
    l2=Label(window2,image=img2,width=160,height=300)
    l2.image = img2

    l2.place(x=0,y=0)


    b1=Button(window2,text='go to  1',command=goto1)
    b1.pack()
    window2.mainloop()


win1()


ошибка


File "/usr/lib/python3.7/tkinter/__init__.py", line 2299, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: image "pyimage3" doesn't exist

1 Ответ

0 голосов
/ 15 апреля 2019

Лучше использовать другой подход, как предложил Мартино, но ваш также может работать с двумя незначительными изменениями.

Во-первых, вам не нужно звонить window2.mainloop(), так как вы используете Toplevel.

Во-вторых, поскольку вы набрали withdraw на своем window1 - просто используйте deiconify(), чтобы отозвать его обратно.

def win2():
    global window2
    global window1

    def goto1():
        window2.destroy()
        #win1()
        window1.deiconify()


    window2=Toplevel()
    window2.title('Window2')
    window1.geometry('300x300')

    img2=PhotoImage(file='clear.png')
    l2=Label(window2,image=img2,width=160,height=300)
    l2.image = img2

    l2.pack()


    b1=Button(window2,text='go to  1',command=goto1)
    b1.pack()
    #window2.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...