1. Standardowe okna dialogowe
Tkinter ma wbudowany moduł messagebox
do wyświetlania okien dialogowych, takich jak komunikaty informacyjne, ostrzeżenia, błędy i zapytania o potwierdzenie. Te dialogi są przydatne do komunikacji z użytkownikiem i tworzenia powiadomień.
Podłączenie modułu messagebox
from tkinter import messagebox
Główne rodzaje dialogów w messagebox
- Okno informacyjne
Okna informacyjne przekazują użytkownikowi istotne informacje. Używa się funkcji
messagebox.showinfo()
.def show_info(): messagebox.showinfo("Informacja", "To jest komunikat informacyjny")
- Ostrzeżenie
Okna ostrzegawcze informują o potencjalnym problemie lub sugerują zwrócenie uwagi na określone działanie. Funkcja
messagebox.showwarning()
tworzy takie okno.def show_warning(): messagebox.showwarning("Ostrzeżenie", "To jest komunikat ostrzegawczy")
- Okno błędu
Okno błędu wyświetlane jest, gdy wystąpi błąd. Funkcja
messagebox.showerror()
jest przydatna do powiadamiania użytkownika o błędach.def show_error(): messagebox.showerror("Błąd", "Wystąpił błąd!")
- Zapytanie o potwierdzenie akcji
Zapytania o potwierdzenie umożliwiają użytkownikowi potwierdzenie lub anulowanie czynności. Funkcja
messagebox.askyesno()
zwracaTrue
lubFalse
w zależności od wyboru użytkownika.def confirm_exit(): response = messagebox.askyesno("Wyjście", "Czy na pewno chcesz wyjść?") if response: root.quit()
2. Wybór plików i folderów
Tkinter oferuje także moduł filedialog
, który pozwala użytkownikom wybierać pliki i foldery. Jest to przydatne w aplikacjach, które pracują z plikami, gdy użytkownik musi załadować lub zapisać plik.
Podłączenie modułu filedialog
from tkinter import filedialog
Główne funkcje modułu filedialog
- Otwieranie pliku: Funkcja
askopenfilename()
pozwala użytkownikowi wybrać plik do otwarcia.def open_file(): file_path = filedialog.askopenfilename( title="Otwórz plik", filetypes=[("Pliki tekstowe", "*.txt"), ("Wszystkie pliki", "*.*")]) if file_path: print("Plik wybrany:", file_path)
- Zapisywanie pliku: Funkcja
asksaveasfilename()
pozwala użytkownikowi wybrać ścieżkę i nazwę dla zapisanego pliku.def save_file(): file_path = filedialog.asksaveasfilename( title="Zapisz plik", defaultextension=".txt", filetypes=[("Pliki tekstowe", "*.txt"), ("Wszystkie pliki", "*.*")]) if file_path: print("Plik zapisany jako:", file_path)
- Wybór folderu: Funkcja
askdirectory()
pozwala wybrać folder.def select_directory(): directory_path = filedialog.askdirectory(title="Wybierz folder") if directory_path: print("Folder wybrany:", directory_path)
3. Niestandardowe wyskakujące okna
Oprócz standardowych okien dialogowych, Tkinter oferuje widżet Toplevel
do tworzenia niestandardowych wyskakujących okien. Można je używać do tworzenia okien z polami wprowadzania, przyciskami i innymi elementami interfejsu.
Tworzenie wyskakującego okna za pomocą Toplevel
import tkinter as tk
# Funkcja do otwierania wyskakującego okna
def open_popup():
popup = tk.Toplevel(root)
popup.title("Wyskakujące okno")
popup.geometry("300x200")
label = tk.Label(popup, text="Wpisz swoje imię:")
label.pack(pady=10)
entry = tk.Entry(popup)
entry.pack(pady=5)
# Przycisk do zamykania okna
close_button = tk.Button(popup, text="Zamknij", command=popup.destroy)
close_button.pack(pady=10)
# Okno główne
root = tk.Tk()
root.title("Okno główne")
root.geometry("400x300")
# Przycisk do wywoływania wyskakującego okna
open_button = tk.Button(root, text="Otwórz wyskakujące okno", command=open_popup)
open_button.pack(pady=50)
root.mainloop()
Objaśnienie kodu
tk.Toplevel(root)
tworzy nowe okno, które wyświetla się nad głównym oknemroot
.- Elementy okna: W wyskakującym oknie można dodawać etykiety, pola wprowadzania i przyciski.
- Przycisk "Zamknij": Funkcja
popup.destroy
zamyka wyskakujące okno.
4. Kompleksowa aplikacja z dialogami i wyskakującymi oknami
Teraz połączymy wszystkie omówione elementy w jednej aplikacji, która zawiera standardowe okna dialogowe, możliwość wyboru plików i niestandardowe wyskakujące okno.
import tkinter as tk
from tkinter import messagebox, filedialog
# Funkcje dla standardowych dialogów
def show_info():
messagebox.showinfo("Informacja", "To jest komunikat informacyjny")
def show_warning():
messagebox.showwarning("Ostrzeżenie", "To jest komunikat ostrzegawczy")
def show_error():
messagebox.showerror("Błąd", "Wystąpił błąd!")
def confirm_exit():
response = messagebox.askyesno("Wyjście", "Czy na pewno chcesz wyjść?")
if response:
root.quit()
def open_file():
file_path = filedialog.askopenfilename(title="Otwórz plik", filetypes=[("Pliki tekstowe", "*.txt"), ("Wszystkie pliki", "*.*")])
if file_path:
messagebox.showinfo("Plik wybrany", file_path)
def save_file():
file_path = filedialog.asksaveasfilename(title="Zapisz plik", defaultextension=".txt", filetypes=[("Pliki tekstowe", "*.txt"), ("Wszystkie pliki", "*.*")])
if file_path:
messagebox.showinfo("Plik zapisany jako", file_path)
def select_directory():
directory_path = filedialog.askdirectory(title="Wybierz folder")
if directory_path:
messagebox.showinfo("Folder wybrany", directory_path)
# Funkcja dla niestandardowego wyskakującego okna
def open_popup():
popup = tk.Toplevel(root)
popup.title("Wyskakujące okno")
popup.geometry("300x200")
tk.Label(popup, text="Wpisz swoje imię:").pack(pady=10)
name_entry = tk.Entry(popup)
name_entry.pack(pady=5)
tk.Button(popup, text="Zamknij", command=popup.destroy).pack(pady=10)
# Okno główne
root = tk.Tk()
root.title("Aplikacja z oknami dialogowymi i wyskakującymi")
root.geometry("400x400")
# Przyciski do wywoływania różnych dialogów i wyskakujących okien
tk.Button(root, text="Informacja", command=show_info).pack(pady=5)
tk.Button(root, text="Ostrzeżenie", command=show_warning).pack(pady=5)
tk.Button(root, text="Błąd", command=show_error).pack(pady=5)
tk.Button(root, text="Potwierdzenie wyjścia", command=confirm_exit).pack(pady=5)
tk.Button(root, text="Otwórz plik", command=open_file).pack(pady=5)
tk.Button(root, text="Zapisz plik", command=save_file).pack(pady=5)
tk.Button(root, text="Wybierz folder", command=select_directory).pack(pady=5)
tk.Button(root, text="Otwórz wyskakujące okno", command=open_popup).pack(pady=20)
root.mainloop()
GO TO FULL VERSION