Как узнать, существует ли виджет в Tkinter?

теперь я знаю, что вы можете проверить, существует ли окно:

x.winfo_exists()

который возвращает логическое значение. Теперь я искал но не смог найти именно то, что мне нужно. Более конкретно мне нужно проверить наличие моих кнопок, ярлыков, списков, ползунков и т. д.

2 ответов


winfo_exists возвращает 1, Если вы не уничтожили виджет, в этом случае он возвращает 0. Этот метод можно вызвать в любом классе виджетов, а не только в корневых или верхних уровнях Tk. Кроме того, вы можете получить все дети виджета с winfo_children:

>>> import Tkinter as tk
>>> root = tk.Tk()
>>> label = tk.Label(root, text="Hello, world")
>>> label.winfo_exists()
1
>>> root.winfo_children()
[<Tkinter.Label instance at 0x0000000002ADC1C8>]
>>> label.destroy()
>>> label.winfo_exists()
0
>>> root.winfo_children()
[]

вы также можете распечатать тип, т. е.. тип(метка). Это может быть полезно, чтобы обеспечить не только существование, но и найти, если что-то придумывает "Нетип" без ошибки. Type () сообщит вам, есть ли у вас экземпляр или другой тип, который может предоставить ценные подсказки о том, как близко программа выполняет или возвращает элементы к тому, что вы думаете, вы спрашиваете! Объект.winfo_exists () и object.winfo_children специфичен и выдает ошибку, если объект не является типом "экземпляр".