Когда вы получаете сообщение об ошибке "_tkinter.TclError: image "pyimage2" doesn't exist
" или что-то в этом роде, это означает, что tkinter не может решить, какая это фотография окна.Это связано с более чем одним Tk()
окнами.Есть несколько других вещей, которые создают проблемы, когда вы используете более одного Tk
, поэтому у Tkinter есть окно другого типа Toplevel
, и оно ссылается на главное окно как дочернее окно.
Позволяет перейти к вашему коду ..
Здесь я вижу несколько других проблем, кроме этой ошибки.
Мне нравитсяЯ сказал не более одного Tk()
окна.Я полагаю, что у вас их больше двух.
Если у вас есть главное окно и вы решили открыть еще несколько с помощью Toplevel, тогда, пожалуйста, не используйте другое mainloop()
, достаточно одного для открытиястолько же окон Toplevel, но не забывайте использовать хотя бы один mainloop()
в конце вашего кода.
Иногда, когда вы определяете Photoimage
в функции, которая хранит изображение влокальная переменная изображение очищается питоном, даже если оно отображается с помощью Label
или Canvas
.Поэтому всегда создавайте ссылку в этом случае.
Поскольку ваш код не работает, я добавил необходимые вещи для его запуска и тестирования.
from tkinter import *
from tkinter import ttk
Main_window = Tk() # Make only one Tk main window
Main_window.geometry('300x150')
Main_window.title("Get Shirts (Buy 1 get 1 Free)")
def small():
s = Toplevel() # For secondary window use Toplevel
s.title('Small Preset Shirt (Not fit to scale)')
canvas = Canvas(s, width = 800, height = 100)
canvas.pack()
b1=ttk.Button(s,text='Click to Start', command = None)
b1.pack()
photo = PhotoImage(file = 'logo.png')
b1.img_ref = photo # Create a reference
b1.config(image=photo,compound=RIGHT)
# s.mainloop() # Don't use mainloop more than once
def stripes():
stripes = Toplevel() # For secondary window use Toplevel
stripes.title('Black Shirt with Stripes')
canvas = Canvas(stripes, width = 800, height = 100)
canvas.pack()
b2=ttk.Button(stripes,text='Click to See Final Price', command = None)
b2.pack()
photo = PhotoImage(file = 'logo.png')
b2.img_ref = photo # Sometimes images in functions becomes garbage value.
b2.config(image=photo,compound=RIGHT)
# stripes.mainloop() # Using two of these will do nothnig.
Category_Lb = Label(Main_window, text='Category', font=('',25))
Category_Lb.pack()
Cate_1 = ttk.Button(Main_window, text='Small Preset Shirt', command=small)
Cate_1.pack()
Cate_2 = ttk.Button(Main_window, text='Black Shirt with Stripes', command=stripes)
Cate_2.pack()
Main_window.mainloop()