Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 9, 2018 13:38:00

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как скрыть фрейм? TK

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
Виджет держиться на экране толко потому, что он есть в списке дочерних обьектов главного окна.




==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#2 Дек. 9, 2018 15:02:49

SadSa13
Зарегистрирован: 2018-11-30
Сообщения: 12
Репутация: +  0  -
Профиль  

Как скрыть фрейм? TK

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().

Я вас правильно понял?

Офлайн

#3 Дек. 9, 2018 15:29:17

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как скрыть фрейм? TK

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() нормально работает с фреймами.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Дек. 9, 2018 15:35:17)

Офлайн

#4 Дек. 9, 2018 18:02:42

SadSa13
Зарегистрирован: 2018-11-30
Сообщения: 12
Репутация: +  0  -
Профиль  

Как скрыть фрейм? TK

PEHDOM
Да скуяли? Я же вам привел рабочий код тут http://python.su/forum/topic/36413/?page=1#post-197821
где .place_forget() нормально работает с фреймами.
Когда вкладку с темой обновлял как-то умудрился просмотреть. Большое спасибо за помощь.

Офлайн

#5 Янв. 9, 2019 19:12:07

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Как скрыть фрейм? TK

Насчёт сетки. Её никто никто не создаёт заранее, она создаётся при компоновке по сетке в пределах окна или в пределах фрейма. В одном и том же окне можно спокойно сочетать компоновку по сетке и по pack или place. Для этого надо объявить фрейм для компоновки по сетке и в него помещаем то, что компонуем только по сетке, а остальное в другом фрейме или в осноном окне по pack или place. Ну, и можно, наоборот - фрейм для прочего, а окно для сетки. Поэкспериментируй и все тонкости познаешь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version