Отображение и скрытие виджетов
Как вы показываете и скрываете виджетов в Tkinter? Я хочу иметь окно ввода, но не показывать его в любое время. Может ли кто-нибудь показать мне функции для отображения и скрытия виджетов и других виджетов в tkinter? Я хочу иметь возможность сделать это без нескольких кадров.
- Нет модуля с именем tkinter при использовании tkintertables
- Tkinter только вызывает after_idle один раз
- Размер рамки Tkinter
- Команда кнопки Tkinter активируется при запуске программы?
- Передать переменные / значения из одного кадра в другой - Tkinter / Python
2 Solutions collect form web for “Отображение и скрытие виджетов”
Об этом было сказано ранее в stackoverflow . Короткий ответ: вы можете использовать grid_remove, из-за чего виджет будет удален, если он был ранее добавлен через сетку. grid_remove
запоминает, где был виджет, поэтому простая grid()
вернет его, не переустанавливая все параметры.
Вы также можете использовать pack_forget (при использовании пакета) и grid_forget (при использовании сетки). Они работают аналогично grid_remove, за исключением того, что они заставляют забыть все настройки, что означает, что вы должны явно разместить его в нужном месте на экране.
Другим вариантом является использование порядка хранения виджетов. Вы можете использовать более низкий метод, чтобы скрыть виджет за его родителем и поднять его вверх. См. Этот ответ для примера.
Я попробовал предложения, которые другие разместили, и заметил, что я делал простую ошибку. Вы не можете вызвать .grid()
в той же строке, которую вы объявляете виджет, который вы собираетесь скрывать.
Чтобы уточнить, я ранее имел это:
self.helpExpansion = ttk.Label(self.helpMenu, text="Expansion Widget").grid(row=1, column=3, sticky=EW) self.helpExpansion.grid_remove()
Но я получил ошибку AttributeError: 'NoneType' object has no attribute 'grid_remove'
. Чтобы исправить это, мне пришлось позвонить в .grid()
в новой строке, например:
self.helpExpansion = ttk.Label(self.helpMenu, text="Help Expansion") self.helpExpansion.grid(row=1, column=3, sticky=EW) self.helpExpansion.grid_remove()
Затем, чтобы переключаться между показом и скрытием, я просто чередовался между вызовом self.helpExpansion.grid()
(аргументы функции не нужны) и self.helpExpansion.grid_remove()
.
Для меня это работало как с tk.Label
и с ttk.Label
. Я использую Python 2.7.13
. Надеюсь, это поможет!
- Не удалось подключиться к SQL Server через pymssql
- Правильное поведение демона (из PEP 3143) объяснено