Tkinter Tutorial - Menüleiste

Jinku Hu 3 Januar 2023
  1. Tkinter Basic Menubar
  2. Tkinter Menubar Befehl
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()

Tkinter Menüleiste Basic

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.

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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