Форум сайта python.su
Требуется скрыть или удалить фрейм со всем, что на нем при нажатии кнопки. Реализуемо?
Офлайн
SadSa13Да. гуглите в сторону pack_forget и grid_forget .
Реализуемо?
[code python][/code]
Отредактировано PEHDOM (Дек. 8, 2018 18:28:03)
Офлайн
PEHDOMПишу как раз после гугления. Все forget не работают с фреймами.
Офлайн
SadSa13 ну вы хоть код какойнить выложите, чтоле? чтобы понимать что на самом вы делаете.
[code python][/code]
Офлайн
PEHDOM
SadSa13 ну вы хоть код какойнить выложите, чтоле? чтобы понимать что на самом вы делаете.
from tkinter import * from tkinter import ttk def event1(*event): #tpasswordfr.place_forget() tmenugr = ttk.Frame(root,width=320,height=700).place(x = 270,y = 700) tmenulb = ttk.Label(tmenugr,text='О нас: ',font='arial 14').place(x = 550, y = 50) def event2(*event): tpasswordfr = ttk.Frame(root,width=320,height=700).place(x = 270,y = 700) tmenulb = ttk.Label(tpasswordfr,text='Браузеры:',font='arial 14').place(x = 550, 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) root.mainloop()
Офлайн
1. Конструкция типа: переменная = виджет.place() не имеет смысла, так как переменная всегда будет None. Нужно использовать либо виджет.place() если мы не планируем изменять виджет, либо: переменная = виджет и переменная.place
#если не нужна переменная пишем так: Button(text="Пароли",width=30, height=2, command=event2, activebackground='#FF4500').place(x = 20,y = 150) #если переменная нужна пишем так: btn1 = Button(text="Пароли",width=30, height=2, command=event2, activebackground='#FF4500') btn1.place(x = 20,y = 150)
from tkinter import * from tkinter import ttk def event1(): ttk.Label(text='О нас: ',font='arial 14').place(x = 550, y = 50) def event2(): ttk.Label(text='Браузеры:',font='arial 14').place(x = 550, y = 50) root = Tk() root.title("Program") root.geometry('1024x700') Frame(root,width=260,height=700, bg='#FFEFD5').place(x = 0,y = 0) #этот фрейм нужен для раскраски Button(text="Меню",width=30,height=2, command=event1, activebackground='#FF4500').place(x = 20,y = 100) Button(text="Пароли",width=30,height=2, command=event2, activebackground='#FF4500').place(x = 20,y = 150) Button(text='Настройки',width=30,height=2, command=event1, activebackground='#FF4500').place(x = 20,y = 200) root.mainloop()
Офлайн
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()
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()
[code python][/code]
Отредактировано PEHDOM (Дек. 9, 2018 11:43:07)
Офлайн
ramiИдея то как раз в том, чтобы при переключении кнопки ( к примеру с “Меню” на “Пароли” фрейм со всей всем, что было на Меню ( все надписи и виджеты) вместе с фреймом исчезают и появляется новый фрейм с новыми виджетами.
1. Конструкция типа: переменная = виджет.place() не имеет смысла, так как переменная всегда будет None. Нужно использовать либо виджет.place() если мы не планируем изменять виджет, либо: переменная = виджет и переменная.place
Офлайн
SadSa13вам уже два раза сказали что коснтрукция не имеет смысла, и даже показали как нужно.
Идея то как раз в том, чтобы при переключении кнопки ( к примеру с “Меню” на “Пароли” фрейм со всей всем, что было на Меню ( все надписи и виджеты) вместе с фреймом исчезают и появляется новый фрейм с новыми виджетами.
[code python][/code]
Отредактировано PEHDOM (Дек. 9, 2018 11:52:27)
Офлайн
PEHDOMСпасибо. Я вас понял.НО! Как-то же подобное должно работать, создают же люди менюшки. На счет .grid() я честно пытался, но главный вопрос в том, как и что создает сетку изначально?
вам уже два раза сказали что коснтрукция не имеет смысла, и даже показали как нужно.
ЗЫ забейте на place(), осваивайте grid() оно более универсальное и гибкое.
Отредактировано PEHDOM (сегодня 11:52:27)
Офлайн