Rozdział 16 · Tworzenie fajnych aplikacji z Tkinter

Messagebox i dialogi

Użytkownik musi dowiedzieć się o sukcesie, ostrzeżeniu lub błędzie – nie z terminala.

messagebox — standardowe dialogi powiadomień

messagebox.py
from tkinter import messagebox

messagebox.showinfo(„Gotowe”, „Plik zapisany.”)
messagebox.showwarning(„Uwaga”, „Pole jest puste.”)
messagebox.showerror(„Błąd”, „Plik nie mógł zostać odczytany.”)
🔶 Schematyczny obraz (nie prawdziwy zrzut ekranu)
Zrobione
ℹ️ Plik zapisany.
OK
Uwaga
⚠️ Pole jest puste.
OK
Błąd
Plik nie mógł być odczytany.
OK
Trzy rodzaje powiadomień — różne ikony i znaczenia, ta sama zasada dzwonienia.
Wygląd dialogów zależy od systemu operacyjnego
Prawdziwy wygląd tych dialogów zależy od systemu operacyjnego, wersji Tk i wybranej tematyki – dokładnego natywnego obrazu środowiska kursu headless- nie można stabilnie odtworzyć, dlatego tutaj użyto schematycznego rysunku, a nie zrzutu ekranu.

Dialogi z dwoma opcjami – odczytaj wartość zwrotną

messagebox_yesno.py
soglasen = messagebox.askyesno(„Potwierdzenie”, „Usunąć tę notatkę?”)
if soglasen:
    udalit_zametku()
Nie zgaduj wyniku po nazwie przycisku
Nie zakładaj z góry, co zwróci dialog — czytaj faktyczną wartość zwracanąTrue/False dla askyesno) i reagują na to, a nie na założenie, że „użytkownik prawdopodobnie kliknie tak”

Trzy rezultaty: Tak / Nie / Anulowanie

W przypadku scenariusza „wypożycz z niezapisanymi zmianami”

messagebox_yesnocancel.py
answer = messagebox.askyesnocancel(
    „Niezapisane zmiany”,
    „Zapisz zmiany przed wyjściem?”,
)

if answer is None:
    pass   # Anuluj – wcale nie odchodź, użytkownik zmienił zdanie
elif answer:
    save_document()
    root.destroy()
else:
    root.destroy()   # Nie — wychodzimy, nie zapisując
Wartość zwrotnaCo nacisnął użytkownik
TrueTak
FalseTak
NoneAnuluj (lub zakończ dialog krzyżykiem)
Częstym błędem jest mylenie Tak/Nie z Zapisz/Zamknij
"Tak" odpowiada na pytanie "zapisz?", a nie "wyjść?". Nie pisz if answer: save() else: root.destroy() — wtedy „Nie” cicho zamknie okno, nawet nie pytając, a „Tak” zapisze, ale nie zamknie. Pełną działającą wersję dla prawdziwego edytora — uwzględniając oba działania i cofnięcie — zobacz w sekcji 16.30.
Modalność
Standardowe dialogi messagebox są modalne: blokują interakcję z resztą aplikacji, dopóki nie zostaną zamknięte. W przypadku natywnych modali są bardziej subtelne narzędzia (transient, grab_set) — rozdział 16.20, oznaczone jako zaawansowane.
Praktyka: dialogi messagebox i wybory
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →