Rozdział 16 · Tworzenie fajnych aplikacji z Tkinter

Widżet i drzewo interfejsu

Interfejs nie jest płaskim lista elementów, lecz drzewem zagnieżdżonych kontenerów.

Każdy widget ma rodzica

Widgety tworzą drzewo: każdy, oprócz samego korzenia, ma rodzica (master) definiuje kontekst umieszczenia i cyklu życia:

root
menu_bar
main_frame
title_label
name_entry
save_button
Typowe drzewo małej aplikacji: root → main_frame → oddzielne widżety formularza.
derevo_widgetov.py
import tkinter as tk

root = tk.Tk()
main_frame = tk.Frame(root)
main_frame.pack()

title_label = tk.Label(main_frame, text=„Forma”)
title_label.pack()
name_entry = tk.Entry(main_frame)
name_entry.pack()

Pierwszy argument prawie każdego widżetu — jego rodzic (main_frame powyżej). Rodzic określa, w którym kontenerze znajdzie się widżet — szczegóły o Frame w rozdziale 16.13.

Cykl życia widgetu

stworzony
configure(...)
ustawiony
.pack() / .grid() / .place()
opublikowane
interaktywny
.destroy()
zniszczony
Tworzenie widgetu tworzy sam obiekt; Menedżer geometrii zawiera ją w układzie okien.
Tworzenie — to tworzenie obiektu, rozmieszczenie — to układ
Tworzenie widżetu (tk.Button(...)) tworzy sam Python- obiekt — tak jak tworzenie każdego innego obiektu (rozdział 14). Menedżer geometrii (pack, grid lub place) uwzględnia ten obiekt w układzie okna, aby użytkownik mógł go widzieć i z nim wchodzić w interakcję. Obiekt istnieje w obu przypadkach — jedyną różnicą jest to, czy uczestniczy w układzie widocznego okna.
destroy() nie jest jedynym sposobem na ukrycie widgetu
.destroy() niszczy widżet nieodwracalnie. Jeśli wystarczy tymczasowo usunąć widżet z ekranu, są łatwiejsze opcje (na przykład, .grid_remove()) — ale dla większości pierwszych aplikacji destrukcyjne usuwanie niepotrzebnych widżetów jest właściwym wyborem.
Praktyka: Drzewo widżetów jako dane
Sprawdza się bez tkinter — modelujemy drzewo przy użyciu zagnieżdżonych danych Python
Otwórz praktykę →