Tkinter tutorial - Menubalk

Een van de meest voorkomende elementen in de GUI is de menubalk. Normaal bevindt zich een menubalk onder de titelbalk om de reeks menu’s weer te geven. Nadat u op een van de hoofdmenu’s hebt geklikt, wordt een submenu uitgebreid met meer relevante menu-items. Een sub-menu wordt normaal gebonden aan de specifieke opdracht als open
, close
, save
of quit
.
Tkinter Basic Menubalk
We zullen ons eerste menubalkvoorbeeld maken met een File
menu zoals in de meeste editors. We nemen alleen Open
, Save
en Quit
sub-menu’s voor eenvoud.
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()
menubar = tk.Menu(app)
De gegeven parameter van de Menu
is de bovenliggende widget van het gemaakte menu. De coderegel hierboven betekent dat de menuwidget menubar
het hoogste niveau van het frame is app
.
filemenu = tk.Menu(menubar)
Op dezelfde manier filemenu
is het menu van de widget menubar
of het submenu van het frame app
.
filemenu.add_command(label="Open")
add_command
voegt de commando’s toe aan het menu filemenu
. label
is de tekst die wordt weergegeven in het submenu.
menubar.add_cascade(label="File", menu=filemenu)
filemenu
wordt toegevoegd menubar
met het commando add_cascade
. File
is het menulabel dat op het bovenste niveau van het frame wordt weergegeven app
.
app.config(menu=menubar)
Hoewel het menubar
is gemaakt als onderliggende widget van app
zoals we hierboven hebben uitgelegd, moet je het nog steeds configureren als menu
van app
. Anders wordt er geen menubalk weergegeven in de GUI.
Het reageert helemaal niet als u op de opties zoals Open
of Save
in het submenu klikt, File
omdat er nog geen opdracht aan is gekoppeld. We zullen het commando in de volgende sessie functioneel maken.
Tkinter Menubalk Commando
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
is 1
standaard ingesteld en zou menu’s van het hoofdvenster loskoppelen om een zwevend menu te maken als op de stippellijnen bovenaan wordt geklikt. Hier is het ingesteld om 0
deze zwevende functie uit te schakelen.
filemenu.add_command(label="Open", command=onOpen)
onOpen
functie is gebonden aan het menu Open
en wordt opgeroepen wanneer erop Open
wordt geklikt.
def onOpen():
print(filedialog.askopenfilename(initialdir = "/",title = "Open file",filetypes = (("Python files","*.py;*.pyw"),("All files","*.*"))))
Deze functie geeft het open dialoogvenster weer en retourneert de geselecteerde bestandsnaam. We openen het bestand niet echt in ons voorbeeld, maar drukken de bestandsnaam af.
tkfiledialog
heeft drie functies,
Functie | parameters | Beschrijving |
---|---|---|
.askopenfilename |
Directory, titel, extensie | Om een bestand te openen : Dialoogvenster dat om selectie van een bestaand bestand vraagt. |
.asksaveasfilename |
Directory, titel, extensie | Om te besparen Dialog dat de schepping of vervanging van een bestand vraagt: file. |
.askdirectory |
Geen | Om Open Directory |
filemenu.add_command(label="Exit", command=app.quit)
Tkinter heeft een interne quit
functie die de root-GUI afsluit. We zouden deze bestaande functie eenvoudigweg kunnen binden in Exit
plaats van onze eigen exit
functie te creëren.
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