Tkinter Tutorial - Menubar

  1. Tkinter Basic Menubar
  2. Comando Tkinter Menubar

Uno degli elementi più comuni nella GUI è la barra dei menu. Una barra dei menu si trova normalmente sotto la barra del titolo per visualizzare la serie di menu. Dopo aver cliccato su uno dei menu di livello superiore, un sotto-menu verrà esteso per visualizzare le voci di menu più rilevanti. Un sotto-menu è normalmente legato al comando specifico come open, close, save o quit.

Tkinter Basic Menubar

Creeremo il nostro primo esempio di menubar che ha il menu File come nella maggior parte degli editor. Includiamo solo i sotto-menu Open, Save e Quit per semplicità.

Tkinter Menubar_Basic.py
import tkinter as tk
 
app = tk.Tk() 
app.geometry('300x200')
app.title("Basic Menu Bar")

menubar = tk.Menu(app)

filemenu = tk.Menu(menubar)
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="Exit")

menubar.add_cascade(label="File", menu=filemenu)

app.config(menu=menubar)

app.mainloop()

Tkinter Menubar Basic

menubar = tk.Menu(app)

Il parametro dato del Menu è il widget padre del menu creato. La riga di codice sopra indica che il widget menubar del menu sarà il livello superiore del frame app.

filemenu = tk.Menu(menubar)

Allo stesso modo, filemenu è il menu del widget menubar, o sotto-menu del frame app.

filemenu.add_command(label="Open")

add_command aggiunge i comandi al menu filemenu. label è il testo visualizzato nel sotto-menu.

menubar.add_cascade(label="File", menu=filemenu)

filemenu viene aggiunto a menubar con il comando add_cascade. File è l’etichetta del menu visualizzata nel livello superiore del frame app.

app.config(menu=menubar)

Anche se menubar è creato per essere il widget figlio di app come abbiamo spiegato sopra, è comunque necessario configurarlo per essere il menu di app. Altrimenti non verrà mostrata alcuna barra di menu nella GUI.

Non risponde affatto se si clicca sulle opzioni come Open o Save nel sottomenu di File perché non c’è ancora un comando collegato ad esse. Renderemo il comando funzionale nella prossima sessione.

Comando Tkinter Menubar

Tkinter Menubar_Command.py
import tkinter as tk
from tkinter import filedialog

def onOpen():
    print(filedialog.askopenfilename(initialdir = "/",title = "Open file",filetypes = (("Python files","*.py;*.pyw"),("All files","*.*"))))
 
def onSave():
    print(filedialog.asksaveasfilename(initialdir = "/",title = "Save as",filetypes = (("Python files","*.py;*.pyw"),("All files","*.*"))))
 
app = tk.Tk() 
app.geometry('300x200')
app.title("Menu Bar Command")

menubar = tk.Menu(app)

filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=onOpen)
filemenu.add_command(label="Save", command=onSave)
filemenu.add_command(label="Exit", command=app.quit)

menubar.add_cascade(label="File", menu=filemenu)

app.config(menu=menubar)

app.mainloop()

filemenu = tk.Menu(menubar, tearoff=0)

tearoff è impostato di default su 1 e staccherebbe i menu dalla finestra principale per creare un menu fluttuante se si clicca sulle linee tratteggiate in alto. Qui è impostato a 0 per disabilitare questa funzione flottante.

filemenu.add_command(label="Open", command=onOpen)

La funzione onOpen è legata al menu Open, e sarà chiamata quando si clicca su Open.

def onOpen():
    print(filedialog.askopenfilename(initialdir = "/",title = "Open file",filetypes = (("Python files","*.py;*.pyw"),("All files","*.*"))))

Questa funzione visualizza la finestra di dialogo aperta e restituisce il nome del file selezionato. Non apriamo il file nel nostro esempio, ma per stampare il suo nome del file.

tkfiledialog ha tre funzioni,

Funzione Parametri Descrizione
.askopenfilename Elenco, titolo, estensione Per aprire il file: Dialogo che richiede la selezione di un file esistente.
.asksaveasfilename Elenco, titolo, estensione Per salvare il file: Dialogo che richiede la creazione o la sostituzione di un file.
.askdirectory Nessuno A directory aperto
filemenu.add_command(label="Exit", command=app.quit)

Tkinter ha una funzione interna quit che chiude l’interfaccia grafica principale. Potremmo semplicemente legare questa funzione esistente a Exit piuttosto che creare la nostra funzione exit.