Tkinter 教程 - 菜单栏

Jinku Hu 2024年2月15日
  1. Tkinter 基本菜单栏
  2. Tkinter 菜单栏命令
Tkinter 教程 - 菜单栏

GUI 中最常见的元素之一是菜单栏。菜单栏通常位于标题栏下方,以显示一系列菜单。用户单击其中一个顶级菜单后,将扩展一个子菜单以显示更多相关菜单项。子菜单通常被绑定到特定命令如 openclosesavequit

Tkinter 基本菜单栏

我们将创建一个基本的 Tkinter 菜单栏,该例子中具有大多数编辑器中的 File 菜单。为了简单起见,我们仅包含 OpenSaveQuit 子菜单。

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 Menubar Basic

menubar = tk.Menu(app)

Menu 的给定参数是所创建菜单的父窗口控件。上面的代码行意味着菜单控件 menubar 将是 app 框架的顶层。

filemenu = tk.Menu(menubar)

同样,filemenumenubar 控件的菜单,或 app 的子菜单。

filemenu.add_command(label="Open")

add_command 将命令添加到菜单 filemenulabel 是子菜单中显示的文本。

menubar.add_cascade(label="File", menu=filemenu)

使用命令 add_cascadefilemenu 添加到 menubarFile 是显示在 app 框架顶部的菜单标签。

app.config(menu=menubar)

虽然 menubar 是作为 app 的子控件创建的,但你仍然需要配置它成为 appmenu。否则,GUI 中不会显示任何菜单栏。

现在如果你单击 File 子菜单中选项,它根本不会响应,因为还没有命令附加到它们。我们将在下一个节介绍如何添加命令。

Tkinter 菜单栏命令

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 设置默认值为 1,如果单击顶部的虚线,它将与主窗口分离菜单以创建浮动菜单。此处设置为 0,禁用此浮动功能。

filemenu.add_command(label="Open", command=onOpen)

onOpen 函数被绑定到菜单 Open,在单击 Open 时将被调用。

def onOpen():
    print(
        filedialog.askopenfilename(
            initialdir="/",
            title="Open file",
            filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
        )
    )

此函数显示打开的对话框并返回所选文件名。在本例中,我们并不是真正打开文件,而是打印文件名。

tkfiledialog 具有三个函数

函数 参数 描述
.askopenfilename Directory, Title, Extension 打开文件:对话请求选择已有文件
.asksaveasfilename Directory, Title, Extension 保存文件:对话框请求创建或替换的文件
.askdirectory None 打开目录
filemenu.add_command(label="Exit", command=app.quit)

Tkinter 具有退出 GUI 的内部函数 quit。我们可以简单地将此函数绑定到 Exit 而不用再创建我们自己的 exit 函数。

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook