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

Główne okno aplikacji i oddzielne okno ustawień obok
Toplevel jest osobnym rzeczywistym oknem, a nie panelem wewnątrz głównego okna. Przykład wyglądu w środowisku kursu. Czcionki, rozmiary i motywy mogą się nieco różnić w zależności od twojego systemu operacyjnego.

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()
root : Tkokno_nastrojek :ToplevelTWORZY
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.

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
Otwórz praktykę →