Python Tkinter 是 Python 的标准 GUI 库,其中的顶层菜单和弹出菜单是开发 GUI 应用程序的重要组成部分。本文将详细讲解 Python tkinter 中的顶层菜单和弹出菜单实例,同时提供两个示例,以便更好地理解。
1. 顶层菜单:
1.1 创建顶层菜单:
在 Python tkinter 中,可以通过菜单栏添加顶层菜单。创建菜单栏需要在主窗口中放置一个 menu 控件,该控件是一个顶层菜单。创建菜单栏之后,可以在菜单栏上添加菜单项,菜单项可以包含子菜单。以下是创建菜单栏和菜单项的示例。
import tkinter as tk
root = tk.Tk()
def dummy():
print("This is a dummy function!")
# 创建菜单栏
menu_bar = tk.Menu(root)
# 创建 File 菜单项
file_menu = tk.Menu(menu_bar, tearoff=0)
file_menu.add_command(label="New", command=dummy)
file_menu.add_command(label="Open", command=dummy)
file_menu.add_command(label="Save", command=dummy)
file_menu.add_separator()
file_menu.add_command(label="Exit", command=root.quit)
# 创建 Edit 菜单项
edit_menu = tk.Menu(menu_bar, tearoff=0)
edit_menu.add_command(label="Cut", command=dummy)
edit_menu.add_command(label="Copy", command=dummy)
edit_menu.add_command(label="Paste", command=dummy)
edit_menu.add_separator()
edit_menu.add_command(label="Undo", command=dummy)
edit_menu.add_command(label="Redo", command=dummy)
# 将菜单项添加到菜单栏
menu_bar.add_cascade(label="File", menu=file_menu)
menu_bar.add_cascade(label="Edit", menu=edit_menu)
# 将菜单栏添加到主窗口
root.config(menu=menu_bar)
root.mainloop()
在这个示例中,通过 tk.Menu()
函数创建了菜单栏和两个菜单项,其中 tearoff=0
参数表示不允许拆分菜单。tk.Menu()
函数通过 add_command()
方法可以添加菜单项,通过 add_separator()
方法可添加分隔符来分隔不同的菜单项。
最后,通过 add_cascade()
方法将菜单项添加到菜单栏上。
1.2 响应菜单项:
为了响应顶层菜单中的菜单项被单击的事件,需要为每个菜单项指定一个回调函数。回调函数是在菜单项被单击时调用的函数,在此函数中执行用户想要实现的操作,例如保存文件或打开一个窗口。
以下是示例代码,当文件菜单中的“Open”菜单项被单击时,调用 dummy 函数。
file_menu = tk.Menu(menu_bar, tearoff=0)
file_menu.add_command(label="New", command=dummy)
file_menu.add_command(label="Open", command=dummy)
file_menu.add_command(label="Save", command=dummy)
在这个示例中, command=dummy
这句话是指定了 dummy() 函数作为回调函数。
2. 弹出菜单:
2.1 创建弹出菜单:
弹出菜单是在用户单击组件时显示的菜单。在 Python tkinter 中,可以使用 tk.Menu()
函数和相关的方法来创建和使用弹出菜单。以下是一个创建弹出菜单的示例代码:
import tkinter as tk
def popup(event):
popup_menu.post(event.x_root, event.y_root)
root = tk.Tk()
# 创建一个标签用于鼠标右击
label = tk.Label(root, text="右击鼠标以显示弹出菜单!")
label.pack()
# 创建弹出菜单
popup_menu = tk.Menu(root, tearoff=0)
popup_menu.add_command(label="Copy")
popup_menu.add_command(label="Paste")
# 鼠标右击事件
label.bind("<Button-3>", popup)
root.mainloop()
在这个例子中,使用 tk.Menu()
函数创建了一个弹出菜单,并使用 add_command()
方法添加了两个菜单项到弹出菜单。使用 bind()
方法将鼠标右击事件绑定到标签上, popup()
函数在右击事件发生时调用。在这个函数中,使用 event.x_root
和 event.y_root
来获取当前鼠标指针的位置,使用 popup_menu.post()
方法来在该位置显示弹出菜单。
2.2 在其他组件中使用弹出菜单:
弹出菜单也可以在其他组件上使用。例如,在文本框或按钮上单击右键时,可以显示弹出菜单。以下是示例代码:
import tkinter as tk
def popup(event):
popup_menu.post(event.x_root, event.y_root)
root = tk.Tk()
# 创建一个文本框
text_box = tk.Entry(root, width=50)
text_box.pack()
# 创建弹出菜单
popup_menu = tk.Menu(root, tearoff=0)
popup_menu.add_command(label="Copy")
popup_menu.add_command(label="Paste")
# 绑定鼠标右击事件
text_box.bind("<Button-3>", popup)
root.mainloop()
在这个示例中,创建了一个包含文本框和弹出菜单的 GUI 窗口。使用 tk.Entry()
函数创建文本框,并使用 bind()
方法将鼠标右击事件与 popup()
函数绑定。弹出菜单会在鼠标右击事件被触发时显示在该组件上。
注:在绑定鼠标右击事件时,使用 <Button-3>
,表示鼠标右键被单击。其中 “3” 是与鼠标按键相关的编号。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python tkinter之顶层菜单、弹出菜单实例 - Python技术站