Найти - Пользователи
Полная версия: Как скрыть фрейм? TK
Начало » GUI » Как скрыть фрейм? TK
1 2
PEHDOM
SadSa13
.НО! Как-то же подобное должно работать, создают же люди менюшки.
Давайте уточним, работает что?.
Еще раз повтрюсь, когда вы делаете
t_password_fr = ttk.Frame(root, width=320,height=700)
вы связываете с переменной t_password_fr виджет типа ttk.Frame, и потом можете делать с этим виждетом все что хотите, скрыть, показать, изменить настройки, переместить …
когда вы делаете tpasswordfr = ttk.Frame(root,width=320,height=700).place(x = 270,y = 700)
вы с переменной tpasswordfr связываете результат выполнения команды place() тоесть None
Виджет держиться на экране толко потому, что он есть в списке дочерних обьектов главного окна.


SadSa13
PEHDOM
t_password_fr = ttk.Frame(root, width=320,height=700)
вы связываете с переменной t_password_fr виджет типа ttk.Frame, и потом можете делать с этим виждетом все что хотите, скрыть, показать, изменить настройки, переместить …
Допустим,что мы нажимаем
 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)
Получится, что 1 виджет просто накрывает новая надпись.
Но, т.к в будущем мы не просто оставим эти label, мы должны будем добавить в раздел “О нас……” текст, а в “Пароли” поле ввода ( или что-нибудь еще ).
Получается, что при нажатии кнопки предыдущая информация или виджеты остаются. просто частично перекрываются новыми.Это проблема.

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

Задача состоит именно в том, чтобы скрыть ненужный фрейм. .place_forget() не работает с ними, а исходя из ваших слов можно вместо этого прописать виджет не добавляя pack(), grid() или place().

Я вас правильно понял?
PEHDOM
SadSa13
Срабатывает наш ивент. Создается виджет
нет, в данной реализации все виджеты уже созданы, и находяться в памяти, происходит следующее
     t_password_fr.place_forget() # скрываем(убираем с формы нафик) фрейм t_password_fr с о всем зоопарком котороый находиться на нем. НО фрейм не удаляеться, он продолжает висеть в памяти, просто его не видно.
    t_menu_gr.place(x = 270,y = 50) # отображаем фрейм t_menu_gr. Он должен быть уже созда заранее.

SadSa13
Следом нажмем
…..
Получится, что 1 виджет просто накрывает новая надпись.
нет, виджет не накрывает предыдущий, я специально расположил виджеты на разных позициях, если убрать place_forget()то будет видно одновремеено два виджета Label
F происходит следующее :
     t_menu_gr.place_forget() # скрываем(убираем с формы нафик) фрейм t_menu_gr с о всем зоопарком котороый находиться на нем.
    t_password_fr.place(x = 270,y = 50)  # отображаем фрейм t_password_fr Он должен быть уже созда заранее.
Конечно же этот метод годиться если у вас простенькая программка на две-три вкладки. При достаточно болшом колличестве элементов-вкладок-фреймов держать все в памяти нет никакого смысла, тем более что некотороые опции вызываются ну очень редко, например About или Help. Тут имеет смысл для каждого окна-фрейма-вкладки создать свой класс или функцию которая будет его отрисовывать когда нужно, а когда в нем отпадет надобность он будет уничтожаться освобождая память. Но поскольку постановка вопроса была весьма общая то и ответ соответвующий.
SadSa13
Задача состоит именно в том, чтобы скрыть ненужный фрейм. .place_forget() не работает с ними
Да скуяли? Я же вам привел рабочий код тут http://python.su/forum/topic/36413/?page=1#post-197821
где .place_forget() нормально работает с фреймами.
SadSa13
PEHDOM
Да скуяли? Я же вам привел рабочий код тут http://python.su/forum/topic/36413/?page=1#post-197821
где .place_forget() нормально работает с фреймами.
Когда вкладку с темой обновлял как-то умудрился просмотреть. Большое спасибо за помощь.
Rafik
Насчёт сетки. Её никто никто не создаёт заранее, она создаётся при компоновке по сетке в пределах окна или в пределах фрейма. В одном и том же окне можно спокойно сочетать компоновку по сетке и по pack или place. Для этого надо объявить фрейм для компоновки по сетке и в него помещаем то, что компонуем только по сетке, а остальное в другом фрейме или в осноном окне по pack или place. Ну, и можно, наоборот - фрейм для прочего, а окно для сетки. Поэкспериментируй и все тонкости познаешь.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB