Отображение виджетов в tkinter: скрыть и вернуть обратно
Мне нужно завершать функцию и удалять объекты button и Label после начала выполнения другой функции.Вот эта функция:
Далее идет другая функция. Так вот , мне нужно, что бы после нажатия на n ную кнопку функция «скрывала» кнопки и лейблы. А после повторного вызывания функции снова «возвращала».
Можно при помощи компоновщика .grid() добавлять объект и временно удалять при помощи .grid_remove()
Пример:
Так же это можно сделать с pack() при помощи функции pack_forget() Пример c pack() :
Так же можно и с place() при помощи того же place_forget()
![]()
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.9.7.43618
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
В Tkinter есть ли способ сделать виджет невидимым?
Хотя что-то вроде этого, заставит виджет вообще не появляться:
5 ответов
Вас могут заинтересовать pack_forget и grid_forget методы виджета. В следующем примере кнопка исчезает при нажатии
Чтобы скрыть виджет, вы можете использовать функцию pack_forget (), а чтобы снова показать его, вы можете использовать функцию pack () и реализовать их оба в отдельных функциях.
Я знаю, что это на пару лет позже, но это уже 3-й ответ Google для «Tkinter hide Label» от 27.10.13 . Так что, если кто-то, как я, несколько недель назад создает простой графический интерфейс и просто чтобы какой-то текст отображался без замены его для другого виджета с помощью методов «lower» или «lift», я хотел бы предложить обходной путь, который я использую (Python2.7, Windows):
Идея заключается в том, что вы можете установить цвет текста DISABLED на фон (‘bg’) родителя, используя «.cget (‘bg’)» http://effbot.org/tkinterbook/widget.htm сделав его» невидимым «. Функция обратного вызова кнопки сбрасывает метку на основной цвет по умолчанию, и текст снова становится видимым.
Недостатком здесь является то, что вам все равно придется выделять место для текста, даже если вы не можете его прочитать, и, по крайней мере, на моем компьютере текст не идеально сочетается с фоном. Возможно, при некоторой настройке цвет может быть лучше, а для компактных графических интерфейсов выделение пустого пространства не должно быть слишком хлопотным для короткой рекламы.
См. Цвет окна по умолчанию Tkinter и шестнадцатеричные цветовые коды для получения дополнительной информации. о том, как я узнал о цвете вещи.
Как объясняется в другом ответе, один из вариантов — использовать pack_forget или grid_forget . Другой вариант — использовать lift и lower . Это меняет порядок размещения виджетов. В результате вы можете скрыть виджеты за виджетами-братьями (или потомками братьев и сестер). Когда вы хотите, чтобы они были видны, вы lift , а когда вы хотите, чтобы они были невидимыми, вы lower .
Преимущество (или недостаток . ) в том, что они все еще занимают место у своего хозяина. Если вы «забудете» виджет, другие виджеты могут перенастроить их размер или ориентацию, но если вы поднимаете или опускаете их, они не будут.
Python-сообщество
Есть группа радиокнопок. При переключении требуется, чтобы одни поля и метки скрывавись, а другие отображались. Можно ли как-нибудь это сделать в Тkinter?
Про свойство state=DISABLED | NORMAL знаю. Но это не то: элементы отключаются, а не скрываются.
И заодно как это делается в PyQT?
#2 Янв. 21, 2013 11:51:12
Tkinter, PyQt. Как скрыть виджет-элемент, а потом снова отобразить его?
#3 Янв. 21, 2013 17:49:57
Tkinter, PyQt. Как скрыть виджет-элемент, а потом снова отобразить его?
Tkinter — можно и даже нужно. Есть три основных варианта:
Вариант первый:
1. Создаем рамку и пакуем туда все кнопки.
2. Рамку размещаем любым методом.
3. Используем метод имя_рамки.метод_упаковки_forget() |Например frm.place_forget()| чтобы скрыть кнопки.
4. Чтобы кнопки опять появились — заново размещаем методом, который использовали до скрытия.
5. На место исчезнувшей рамки можно свободно разместить новую с новым набором кнопок и потом их чередовать и чередовать и чередовать и чередовать…
Вариант второй:
Есть интересненькая особенность метода grid, которая называется grid_remove(). Специфика, по сравнению с первым вариантом заключается в том, что метод удаляет виджет из-под управления упаковщика, но при этом сохраняет информацию об упаковке.
Вариант третий (для извращенцев):
1. Создать словарь, где каждому ключу будет соответствовать список, состоящий из ссылок на объекты кнопок, размещений этих кнопок и с функциями, которые они вызывают.
2. Скрывать и показывать объекты массово, исходя из активности списков в отдельном цикле.
Hide, Recover and Delete Tkinter Widgets

In this tutorial, we will demonstrate how to hide, recover the Tkinter widgets, by clicking a Tkinter button. Eventually, we will also show you how to delete or kill existing Tkinter widgets.
Hide and Recover Tkinter Widgets
pack_forget() Method to Hide Tkinter Widgets
In contrast to pack method in Tkinter widgets, we could hide the Tkinter widgets by calling pack_forget() method to make the widgets invisible.
pack_forget() is bind to the command of the button buttonForget .
It will hide the label widget after clicking the button, but the label itself still exists but becomes invisible.
We need to call the pack() method again to pack the widget to make it visible, or in other words, to recover it.
grid_forget() Method to Hide Tkinter Widgets if grid Layout Is Used
If the widgets are placed with the grid layout manager, we should use grid_forget() method to make the Tkinter widgets invisible.
Here, we bind the grid_forget method to the command of the button.
You could notice that the position of the label is not the same before it is hidden after you call grid method again.
If we intend to restore the label to its original position, grid_remove method shall be the right option.
grid_remove() Method to Hide Tkinter Widgets if grid Layout Is Used
grid_remove() hides the widget but remembers the grid options like column and row .
Delete Tkinter Widgets Permanently by Clicking a Button
We will show how to delete Tkinter widgets permanently by calling the destroy method in this section.