SadSa13 давайте я угадаю, оно вам говорит что “global name ‘tpasswordfr’ is not defined”?
Так это не forget не работают с фреймами, это вы не знаете разницу между глобальными и локальными переменными. Дальше будет еще веселее, оно будет сообщать вам что ‘NoneType’ object has no attribute ‘place_forget’. Это опять же не потому что “оно не работает”, а потому что вы не понимаете что делаете.
Вот так оно работает, хоть местами и неправильно:
from tkinter import *
from tkinter import ttk
def event1(*event):
tpasswordfr.place_forget()
tmenugr.place(x = 270,y = 50)
def event2(*event):
tmenugr.place_forget()
tpasswordfr.place(x = 270,y = 50)
root = Tk()
root.title("Program")
root.geometry('1024x700')
mainfr = Frame(root,width=260,height=700, bg='#FFEFD5').place(x = 0,y = 0)
menufr= ttk.Frame(mainfr,width=200,height=40).place(x = 20,y = 100)
passwordfr = ttk.Frame(mainfr,width=200,height=40).place(x = 20,y = 150)
settingfr = ttk.Frame(mainfr,width=200,height=40).place(x = 20,y = 200)
menubtn = Button( menufr,text="Меню",width=30,height=2, command=event1, activebackground='#FF4500').place(x = 20,y = 100)
passwordbtn = Button( passwordfr,text="Пароли",width=30,height=2, command=event2, activebackground='#FF4500').place(x = 20,y = 150)
settingbtn = Button ( settingfr, text='Настройки',width=30,height=2, command=event1, activebackground='#FF4500').place(x = 20,y = 200)
tmenugr = ttk.Frame(root,width=320,height=700)
ttk.Label(tmenugr,text='О нас: ',font='arial 14').place(x = 50, y = 50)
tpasswordfr = ttk.Frame(root,width=320,height=700)
ttk.Label(tpasswordfr,text='Браузеры:',font='arial 14').place(x = 50, y = 50)
root.mainloop()
теперь замечания вообще:
- названия переменных, используйте хотябы симывол “_” для разделения, например: main_fr, menu_fr, password_fr, menu_btn и тд. вместо mainfr, menufr и тд… оно же нечитаемо.
- названия процедур event1 и event2 неинформативны лучше заменить на menu_btn_pres, password_btn_press к примеру. Тогда сразу понятно что это за процедуры.
- консмтрукция типа “ mainfr = Frame(root ,width=260,height=700, bg='#FFEFD5').place(x = 0,y = 0)” вообще бессмыслена, так как в переменную mainfr вернется результат выполнения place() (тоесть None), вместо ссылки на виджет типа Frame. Вы ведь заметили что задаете абсолютные координанаты, вместо относительных к фреймам в которых должны находиться виджеты? Это именно потому что у вас первым аргументом везде None, вот оно все и херачит на окно верхнего уровня.
вот так оно работает правильно:
from tkinter import *
from tkinter import ttk
def menu_btn_press(*event):
t_password_fr.place_forget()
t_menu_gr.place(x = 270,y = 50)
def password_btn_press(*event):
t_menu_gr.place_forget()
t_password_fr.place(x = 270,y = 50)
root = Tk()
root.title("Program")
root.geometry('1024x700')
main_fr = Frame(root,width=260,height=700, bg='#FFEFD5')
main_fr.place(x = 0,y = 0)
menu_fr= ttk.Frame(main_fr,width=200,height=40)
menu_fr.place(x = 20,y = 100)
password_fr = ttk.Frame(main_fr,width=200,height=40)
password_fr.place(x = 20,y = 150)
setting_fr = ttk.Frame(main_fr,width=200,height=40)
setting_fr.place(x = 20,y = 200)
menu_btn = Button(menu_fr,text="Меню",width=30,height=2, command=menu_btn_press, activebackground='#FF4500')
menu_btn.place(x=5, y=2)
password_btn = Button(password_fr,text="Пароли",width=30,height=2, command=password_btn_press, activebackground='#FF4500')
password_btn.place(x=5, y=2)
setting_btn = Button (setting_fr, text='Настройки',width=30,height=2, command=menu_btn_press, activebackground='#FF4500')
setting_btn.place(x=5, y=2)
t_password_fr = ttk.Frame(root, width=320,height=700)
ttk.Label(t_password_fr,text='Браузеры:',font='arial 14').place(x = 200, y = 50)
t_menu_gr = ttk.Frame(root,width=320,height=700)
ttk.Label(t_menu_gr,text='О нас: ',font='arial 14').place(x = 200, y = 100)
root.mainloop()