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
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 — 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