Tkinter tutorial - Menubalk

  1. Tkinter Basic Menubalk
  2. Tkinter Menubalk Commando

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()

Tkinter Menubalk Basic

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.