Tkinter 教程 - 菜单栏
GUI 中最常见的元素之一是菜单栏。菜单栏通常位于标题栏下方,以显示一系列菜单。用户单击其中一个顶级菜单后,将扩展一个子菜单以显示更多相关菜单项。子菜单通常被绑定到特定命令如 open
,close
,save
或 quit
。
Tkinter 基本菜单栏
我们将创建一个基本的 Tkinter 菜单栏,该例子中具有大多数编辑器中的 File
菜单。为了简单起见,我们仅包含 Open
、Save
和 Quit
子菜单。
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)
Menu
的给定参数是所创建菜单的父窗口控件。上面的代码行意味着菜单控件 menubar
将是 app
框架的顶层。
filemenu = tk.Menu(menubar)
同样,filemenu
是 menubar
控件的菜单,或 app
的子菜单。
filemenu.add_command(label="Open")
add_command
将命令添加到菜单 filemenu
。label
是子菜单中显示的文本。
menubar.add_cascade(label="File", menu=filemenu)
使用命令 add_cascade
将 filemenu
添加到 menubar
。File
是显示在 app
框架顶部的菜单标签。
app.config(menu=menubar)
虽然 menubar
是作为 app
的子控件创建的,但你仍然需要配置它成为 app
的 menu
。否则,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
函数。