Rozdział 16 · Tworzenie fajnych aplikacji z Tkinter
Toplevel: wiele okien
Prawdziwa aplikacja prawie zawsze potrzebuje więcej niż jednego okna, ale nie więcej niż jednego root.
Toplevel — dodatkowe okno
Dla drugiego okna (ustawienia, „O mnie”
tk.Toplevel:
toplevel.py
def otkryt_nastrojki():
okno_nastrojek = tk.Toplevel(root)
okno_nastrojek.title(„Ustawienia”)
ttk.Label(okno_nastrojek, text=„Tutaj będą ustawienia”).pack(padx=20, pady=20)
ttk.Button(root, text=„Ustawienia”, command=otkryt_nastrojki).pack()
Jeden root, dodatkowe okna — przez Toplevel
Do regularnego zastosowania, jeden korzeń
Tk(), a dodatkowe okna są tworzone przez Toplevel. Technicznie można stworzyć kilka niezależnych Tk() możliwe — każdy ma własny Tcl interpretera — ale dla zwykłej, pojedynczej aplikacji zwykle nie jest to to, czego chcesz i nie jest to zalecana struktura. Zasada ogólna: jedna aplikacja → jedna root → Toplevel na resztę okien.Trochę głębiej: Modal
Niektóre dialogi muszą blokować interakcję z oknem nadrzędnym, dopóki nie będą zamknięte:
modalnoe_okno.py
okno = tk.Toplevel(root)
okno.transient(root) # okno wizualnie należy do rodzica
okno.grab_set() # przyjmuje wszystkie dane wejściowe aż do zamknięcia
root.wait_window(okno) # rodzic czeka na zamknięcie tego okna
Niekoniecznie na początku
Modale niestandardowe to zaawansowana technika. Dla większości zastosowań edukacyjnych i małych zastosowań stosuje się standardowe
Toplevel bez grab_set() w zupełności wystarczy.Praktyka: okno ustawień przez Toplevel
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie