CodeGym /Corsi /Python SELF IT /Lavora con finestre di dialogo e finestre popup

Lavora con finestre di dialogo e finestre popup

Python SELF IT
Livello 50 , Lezione 1
Disponibile

1. Finestre di dialogo standard

Tkinter ha un modulo integrato messagebox per mostrare finestre di dialogo come messaggi informativi, avvisi, errori e richieste di conferma. Questi dialoghi sono utili per comunicare con l'utente e creare notifiche.

Importa il modulo messagebox


from tkinter import messagebox

Tipi principali di dialoghi con messagebox

  1. Finestra informativa

    Le finestre informative comunicano informazioni importanti all'utente. Si utilizza la funzione messagebox.showinfo().

    
    def show_info():
        messagebox.showinfo("Informazione", "Questo è un messaggio informativo")
                
  2. Avvertenza

    Una finestra di avvertenza segnala un potenziale problema o consiglia di prestare attenzione a un'azione specifica. La funzione messagebox.showwarning() crea una finestra di avvertenza.

    
    def show_warning():
        messagebox.showwarning("Avvertimento", "Questo è un messaggio di avvertimento")
                
  3. Finestra di errore

    Una finestra di errore viene mostrata quando si verifica un errore. La funzione messagebox.showerror() è utile per notificare all'utente l'errore.

    
    def show_error():
        messagebox.showerror("Errore", "Si è verificato un errore!")
                
  4. Richiesta di conferma di un'azione

    Le richieste di conferma permettono all'utente di confermare o annullare un'azione. La funzione messagebox.askyesno() ritorna True o False in base alla scelta dell'utente.

    
    def confirm_exit():
        response = messagebox.askyesno("Uscita", "Sei sicuro di voler uscire?")
        if response:
            root.quit()
                

2. Selezione di file e cartelle

Tkinter offre anche il modulo filedialog, che consente agli utenti di selezionare file e cartelle. È utile per applicazioni che lavorano con file, dove è necessario che l'utente carichi o salvi un file.

Importa il modulo filedialog


from tkinter import filedialog

Funzioni principali di filedialog

  1. Apri file: La funzione askopenfilename() permette all'utente di scegliere un file da aprire.
    
    def open_file():
        file_path = filedialog.askopenfilename(
            title="Apri file",
            filetypes=[("File di testo", "*.txt"), ("Tutti i file", "*.*")])
        if file_path:
            print("File selezionato:", file_path)
                
  2. Salva file: La funzione asksaveasfilename() permette all'utente di scegliere un percorso e un nome per salvare il file.
    
    def save_file():
        file_path = filedialog.asksaveasfilename(
            title="Salva file",
            defaultextension=".txt",
            filetypes=[("File di testo", "*.txt"), ("Tutti i file", "*.*")])
        if file_path:
            print("File salvato come:", file_path)
                
  3. Seleziona cartella: La funzione askdirectory() permette di selezionare una cartella.
    
    def select_directory():
        directory_path = filedialog.askdirectory(title="Seleziona cartella")
        if directory_path:
            print("Cartella selezionata:", directory_path)
                

3. Finestre popup personalizzate

Oltre alle finestre di dialogo standard, Tkinter fornisce il widget Toplevel per creare finestre popup personalizzate. Queste finestre possono essere utilizzate per creare popup multifunzionali con campi di input, pulsanti e altri elementi dell'interfaccia utente.

Creare una finestra popup con Toplevel


import tkinter as tk

# Funzione per aprire una finestra popup
def open_popup():
    popup = tk.Toplevel(root)
    popup.title("Finestra popup")
    popup.geometry("300x200")

    label = tk.Label(popup, text="Inserisci il tuo nome:")
    label.pack(pady=10)

    entry = tk.Entry(popup)
    entry.pack(pady=5)

    # Pulsante per chiudere la finestra
    close_button = tk.Button(popup, text="Chiudi", command=popup.destroy)
    close_button.pack(pady=10)

# Finestra principale
root = tk.Tk()
root.title("Finestra principale")
root.geometry("400x300")

# Pulsante per aprire la finestra popup
open_button = tk.Button(root, text="Apri finestra popup", command=open_popup)
open_button.pack(pady=50)

root.mainloop()
    

Spiegazione del codice

  • tk.Toplevel(root) crea una nuova finestra che viene mostrata sopra la finestra principale root.
  • Elementi della finestra: Nella finestra popup puoi aggiungere etichette, campi di input e pulsanti.
  • Pulsante "Chiudi": La funzione popup.destroy chiude la finestra popup.

4. Applicazione completa con dialoghi e finestre popup

Ora raccogliamo tutti gli elementi esaminati in un'unica applicazione che include finestre di dialogo standard, selezione di file e una finestra popup personalizzata.


import tkinter as tk
from tkinter import messagebox, filedialog

# Funzioni per finestre di dialogo standard
def show_info():
    messagebox.showinfo("Informazione", "Questo è un messaggio informativo")

def show_warning():
    messagebox.showwarning("Avvertimento", "Questo è un messaggio di avvertimento")

def show_error():
    messagebox.showerror("Errore", "Si è verificato un errore!")

def confirm_exit():
    response = messagebox.askyesno("Uscita", "Sei sicuro di voler uscire?")
    if response:
        root.quit()

def open_file():
    file_path = filedialog.askopenfilename(title="Apri file", filetypes=[("File di testo", "*.txt"), ("Tutti i file", "*.*")])
    if file_path:
        messagebox.showinfo("File selezionato", file_path)

def save_file():
    file_path = filedialog.asksaveasfilename(title="Salva file", defaultextension=".txt", filetypes=[("File di testo", "*.txt"), ("Tutti i file", "*.*")])
    if file_path:
        messagebox.showinfo("File salvato come", file_path)

def select_directory():
    directory_path = filedialog.askdirectory(title="Seleziona cartella")
    if directory_path:
        messagebox.showinfo("Cartella selezionata", directory_path)

# Funzione per finestra popup personalizzata
def open_popup():
    popup = tk.Toplevel(root)
    popup.title("Finestra popup")
    popup.geometry("300x200")

    tk.Label(popup, text="Inserisci il tuo nome:").pack(pady=10)
    name_entry = tk.Entry(popup)
    name_entry.pack(pady=5)

    tk.Button(popup, text="Chiudi", command=popup.destroy).pack(pady=10)

# Finestra principale
root = tk.Tk()
root.title("Applicazione con finestre di dialogo e popup")
root.geometry("400x400")

# Pulsanti per diverse finestre di dialogo e popup
tk.Button(root, text="Informazione", command=show_info).pack(pady=5)
tk.Button(root, text="Avvertimento", command=show_warning).pack(pady=5)
tk.Button(root, text="Errore", command=show_error).pack(pady=5)
tk.Button(root, text="Conferma uscita", command=confirm_exit).pack(pady=5)
tk.Button(root, text="Apri file", command=open_file).pack(pady=5)
tk.Button(root, text="Salva file", command=save_file).pack(pady=5)
tk.Button(root, text="Seleziona cartella", command=select_directory).pack(pady=5)
tk.Button(root, text="Apri finestra popup", command=open_popup).pack(pady=20)

root.mainloop()
    
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION