Нет точного способа запросить в корневом окне список всех виджетов. Вы можете использовать pack_slaves
или grid_slaves
, чтобы получить список виджетов, управляемых конкретным контейнером, но в зависимости от того, как вы пишете свое приложение, нет гарантии, что вы получите все виджеты.
Вы также можете использовать winfo_children
, чтобы получить список всех прямых потомков виджета. Если у вас есть вложенная иерархия виджетов (например, с использованием фреймов в качестве промежуточных контейнеров для организационных целей), вам может потребоваться выполнить какой-то цикл для поиска определенного виджета.
Лучший и самый простой подход - сделать ваше приложение экземпляром класса. Затем вы можете сохранить ссылки на виджеты как атрибуты класса. Я очень рекомендую этот подход, просто нет веской причины делать это любым другим способом.
Например:
class MyApp(Tk):
def __init__(self, *args, **kwargs):
...
self.open_button = Button(...)
self.close_button = Button(...)
...
def OnSomeEvent(self, event):
if ...:
self.open_button.configure(state="disabled")
else:
self.open_button.configure(state="normal")