Помогите подружить .pack() с виджетами canvas (Tkinter)
Я делаю имитацию окна входа пользователя, где ему нужно ввести имя и пароль. Скрипт писал используя canvas (чтобы загрузить картинку на фон) - соответственно использовал виджеты canvas вместо label и pack(). Всё шло хорошо, пока не потребовалось сделать переход на новое окно с помощью frame и frame.pack.forget (когда пользователь вводит верные данные, его перенаправляет на новое окно - старое забывается).
ПРОБЛЕМА: как писал выше, на форуме мне предоставили решение с переходом через frame.pack.forget, но проблема заключается в том, что canvas не дружит с pack() и виджеты просто не отображаются (я перенёс строчки кода в мой скрипт с canvas - не работает).
Мой изначальный код (без перехода):
from tkinter import *
from PIL import ImageTk, Image
dict_pass = {
'Роман' : '111',
}
#window
root = Tk()
root.title('Авторизация')
root.geometry("1020x780")
root.resizable(width=True, height=True)
bg = ImageTk.PhotoImage(file="C:\\xampp\\anonymous\\python.png")
#canvas
my_canvas = Canvas(root, width=323, height=576, bd=0,
highlightthickness=0)
my_canvas.pack(fill="both", expand=True)
my_canvas.create_image(0,0, image=bg, anchor="nw")
text_id = my_canvas.create_text(350, 500, text='', font='Verdana 30')
def Doctype():
my_canvas.itemconfig(text_id, text='Вход выполнен', fill='Green')
def Error():
my_canvas.itemconfig(text_id, text='Ошибка авторизации!',
fill='Red')
def GetText():
name=name_entry.get()
password=pass_entry.get()
for key, value in dict_pass.items():
if name == key:
if password == value:
return Doctype()
return Error()
#objects
my_canvas.create_text(370,200, text='Пользователь', fill='Yellow',
font='Verdana 22')
my_canvas.create_text(420,300, text='Пароль', fill='Yellow',
font='Verdana 22')
name_entry = Entry(root, font=("Helvetica", 18), width=13, fg='Black',
bg='White')
pass_entry = Entry(root, font=("Helvetica", 18), width=13, fg='Black',
bg='White')
name_window = my_canvas.create_window(500, 190, anchor="nw",
window=name_entry)
pass_window = my_canvas.create_window(500, 290, anchor="nw",
window=pass_entry)
btn = Button(root, text='Вход', font='Helvetica 18', width=10,
bg='White', fg='Black', command=GetText)
btn_window = my_canvas.create_window(420,370, anchor='nw', window=btn)
root.mainloop()
Предложенный мне ответ с переходом без Canvas (без фона):
from tkinter import *
from PIL import ImageTk, Image
dict_pass = {
'Миша': '415'
}
def log_in():
try:
if dict_pass[name_entry.get()] == pass_entry.get():
frame.pack_forget()
frame_log_inned.pack()
except KeyError:
pass
root = Tk()
root.title('Авторизация')
root.geometry("640x480")
root.resizable(width=True, height=True)
frame = Frame(root)
Label(frame, text='Пользователь').pack()
name_entry = Entry(frame, font=("Helvetica", 18), width=13,
fg='Black', bg='White')
name_entry.pack()
Label(frame, text='Пароль').pack()
pass_entry = Entry(frame, font=("Helvetica", 18), width=13,
fg='Black', bg='White')
pass_entry.pack()
btn = Button(frame, text='Вход', font='Helvetica 18', width=10,
bg='White', fg='Black', command=log_in)
btn.pack(pady=10)
frame.pack()
frame_log_inned = Frame(root)
Label(frame_log_inned, text='Успех').pack()
root.mainloop()
Прошу помочь как-то сделать переход на новую страницу с моим изначальным скриптом в canvas. Так как хочется сделать с фоном. Буду очень благодарен, если найдёте решение!