Tkinter Tutorial - Menüleiste
Eines der am häufigsten verwendeten Elemente in der GUI ist die Menüleiste. Eine Menüleiste befindet sich normalerweise unter der Titelleiste, um die Reihe von Menüs anzuzeigen. Nach dem Anklicken eines der Hauptmenüs wird ein Untermenü erweitert, um weitere relevante Menüpunkte anzuzeigen. Ein Untermenü ist normalerweise an einen bestimmten Befehl wie open
, close
, save
oder quit
gebunden.
Tkinter Basic Menubar
Wir werden unser erstes Menüleisten-Beispiel erstellen, das wie in den meisten Editoren das Menü File
hat. Der Einfachheit halber fügen wir nur die Untermenüs Open
, Save
und Quit
ein.
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)
Der angegebene Parameter des Menu
ist das übergeordnete Widget des erstellten Menüs. Die obige Codezeile bedeutet, dass das Menü-Widget menubar
die oberste Ebene des Rahmens app
ist.
filemenu = tk.Menu(menubar)
Ähnlich ist filemenu
das Menü des Widgets menubar
, oder das Untermenü des Frames app
.
filemenu.add_command(label="Open")
add_command
fügt die Befehle zum Menü filemenu
hinzu. label
ist der im Untermenü angezeigte Text.
menubar.add_cascade(label="File", menu=filemenu)
filemenu
wird der menubar
mit dem Befehl add_cascade
hinzugefügt. File
ist das Menü-Label, das in der obersten Ebene des Rahmens app
angezeigt wird.
app.config(menu=menubar)
Obwohl die menubar
wie oben erklärt als Kind von app
erstellt wird, müssen Sie sie trotzdem als das Menü
von app
konfigurieren. Andernfalls wird keine Menüleiste in der GUI angezeigt.
Sie reagiert überhaupt nicht, wenn Sie die Optionen wie Open
oder Save
im Untermenü von File
anklicken, weil noch kein Befehl daran angehängt ist. Wir werden den Befehl in der nächsten Session funktionsfähig machen.
Tkinter Menubar Befehl
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
ist standardmäßig auf 1
gesetzt und würde Menüs vom Hauptfenster lösen, um ein schwebendes Menü zu erzeugen, wenn die gepunkteten Linien oben angeklickt werden. Hier ist es auf 0
eingestellt, um diese schwebende Funktion zu deaktivieren.
filemenu.add_command(label="Open", command=onOpen)
Die Funktion onOpen
ist an das Menü Open
gebunden, und wird aufgerufen, wenn Open
angeklickt wird.
def onOpen():
print(
filedialog.askopenfilename(
initialdir="/",
title="Open file",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
Diese Funktion zeigt den Öffnen-Dialog an und gibt den ausgewählten Dateinamen zurück. Wir öffnen die Datei in unserem Beispiel nicht wirklich, sondern um ihren Dateinamen zu drucken.
tkfiledialog
hat drei Funktionen,
Funktion | Parameter | Beschreibung |
---|---|---|
.askopenfilename |
Verzeichnis, Titel, Erweiterung | Um eine Akte zu öffnen: Dialog, der die Auswahl einer vorhandenen Datei anfordert. |
.asksaveasfilename |
Verzeichnis, Titel, Erweiterung | Zur **Speicherung der Akte: Dialog, der das Erstellen oder Ersetzen einer Datei anfordert. |
.askVerzeichnis |
Keine | Um Verzeichnis zu öffnen |
filemenu.add_command(label="Exit", command=app.quit)
Tkinter hat eine interne quit
-Funktion, die das Root-GUI beendet. Wir könnten diese bestehende Funktion einfach an Exit
binden, anstatt unsere eigene Exit
Funktion zu erstellen.
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