Tkinter Tutorial - 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à.
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()
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
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
.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook