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)
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ść zwrotna | Co nacisnął użytkownik |
|---|---|
True | Tak |
False | Tak |
None | Anuluj (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