使用 Tkinter 的右键菜单
Python 3.x 捆绑了Tkinter模块,该模块可用于制作基于 GUI 的应用程序。在Python支持的所有其他框架中,Tkinter 是最简单和最快的。 Tkinter 提供了大量可用于构建 GUI 应用程序的小部件,以及在后台持续运行直到手动关闭应用程序的主事件循环。
注意:更多信息请参考Python GUI – tkinter
Tkinter 提供了一种处理事件的机制。事件是必须由程序内部的一段代码处理的任何操作。事件包括鼠标点击、鼠标移动或用户的击键。 Tkinter 使用允许用户将事件绑定到每个小部件的处理程序的事件序列。
句法:
widget.bind(event, handler)
Tkinter 小部件能够捕获各种事件,例如 Button、ButtonRelease、Motion、Double-Button、FocusIn、FocusOut、Key 等等。本文中的代码主要处理事件处理,一旦在父窗口小部件上遇到右键单击,就会显示带有各种选项的弹出菜单。 Tkinter 的 Menu 小部件用于实现顶层、下拉和弹出菜单。
- 导入 tkinter 模块
import tkinter
- 导入 tkinter 子模块
from tkinter import *
- 创建父小部件
root = Tk()
语法: Tk(screenName=None, baseName=None, className='Tk', useTk=1)
参数:在本例中,Tk 类在没有参数的情况下被实例化。
解释:
Tk() 方法创建一个空白父窗口小部件,顶部带有关闭、最大化和最小化按钮。 - 创建要显示的标签
L = Label(root, text="Right-click to display menu", width=40, height=20)
语法:标签(主,**选项)
范围:- master:父窗口(根)作为主窗口。
- 选项: Label() 方法支持以下选项——文本、锚点、bg、位图、bd、光标、字体、fg、高度、宽度、图像、对齐、浮雕、padx、pady、textvariable、下划线和环绕长度。这里的 text 选项用于向用户显示信息性文本,width 和 height 指定了 Label Widget 在父窗口中的位置。
解释:
标签小部件用于显示与小部件对应的文本或图像。屏幕上显示的文本可以使用标签小部件下可用的其他选项进一步格式化。 - 定位标签
L.pack()
语法:包(选项)
范围:- options: pack() 方法支持的选项有 expand、fill 和 side,用于在父窗口上定位小部件。然而,pack() 方法在这里没有任何选项被起诉。
解释:
pack() 方法用于将子小部件定位在父小部件中。 - 创建菜单
m = Menu(root, tearoff=0)
语法:菜单(主,选项)
范围:- master: root 是主窗口小部件或父窗口小部件。
- options: Menu 小部件支持的选项有 title、tearoff、selectcolor、font、fg、postcommand、relief、image、bg、bd、cursor、activeforeground、activeborderwidth 和 activebackground。这里使用了 'tearoff' 选项。
解释:
撕下用于从创建浮动菜单的主窗口中分离菜单。如果tearoff=1,它会在顶部创建一个带有虚线的菜单,单击该菜单会撕下父窗口并变为浮动菜单。在这里限制主窗口中的菜单tearoff=0。 - 向菜单添加选项
m.add_command(label="Cut") m.add_command(label="Copy") m.add_command(label="Paste") m.add_command(label="Reload") m.add_separator() m.add_command(label="Rename")
语法: add_command(选项)
范围:- 选项:可用的选项有标签、命令、下划线和加速键。 label 选项在这里用于指定菜单项的名称。
解释:
add_command() 方法将菜单项添加到菜单中。 add_separator() 在菜单项之间创建一条细线。 def do_popup(event): try: m.tk_popup(event.x_root, event.y_root) finally: m.grab_release()
语法: tk_popup(x_root, y_root)
参数:此过程在屏幕上的给定位置发布一个菜单,x_root 和 y_root 是当前鼠标相对于屏幕左上角的位置。
解释:
此方法是事件处理程序。当事件(右键单击)发生时,该方法被调用并且菜单出现在事件发生位置的父窗口小部件上。 finally 块确保grab_release() 方法释放事件抓取。L.bind("
", do_popup) 语法:绑定(事件,处理程序)
范围:- 事件:这里,右键是事件,用
表示。 - 处理程序:处理程序是在事件触发时执行某些特定任务的一段代码。
解释:
用鼠标指针在小部件上按下鼠标右键,这会触发由事件处理程序(do_popup()函数)处理的事件。 do_popup()函数显示菜单。- 事件:这里,右键是事件,用
- 运行应用程序
mainloop()
语法: mainloop()
参数:不接受任何参数。
解释:
它就像一个无限循环,使应用程序一直运行,直到手动关闭主窗口。
import tkinter
from tkinter import *
root = Tk()
L = Label(root, text ="Right-click to display menu",
width = 40, height = 20)
L.pack()
m = Menu(root, tearoff = 0)
m.add_command(label ="Cut")
m.add_command(label ="Copy")
m.add_command(label ="Paste")
m.add_command(label ="Reload")
m.add_separator()
m.add_command(label ="Rename")
def do_popup(event):
try:
m.tk_popup(event.x_root, event.y_root)
finally:
m.grab_release()
L.bind("", do_popup)
mainloop()
输出
解释
当在父窗口上单击鼠标右键时,弹出菜单出现并显示选项列表。