Python Tkinter Menu组件详解

目录
  • 何时使用 Menu 组件?
  • 用法
  • 参数
  • 方法
    • add_cascade(**options)
    • add_checkbutton(**options)
    • add_command(**options)
    • add_radiobutton(**options)
    • add_separator(**options)
    • delete(index1, index2=None)
    • entrycget(index, option)
    • entryconfig(index, **options)
    • entryconfigure(index, **options)
    • index(index)
    • insert(index, itemType, **options)
    • insert_cascade(index, **options)
    • insert_checkbutton(index, **options)
    • insert_command(index, **options)
    • insert_radiobutton(index, **options)
    • insert_separator(index, **options)
    • invoke(index)
    • post(x, y)
    • type(index)
    • unpost()
    • yposition(index)
  • 总结

Menu(菜单)组件用于实现顶级菜单、下拉菜单和弹出菜单。

何时使用 Menu 组件?

Menu 组件通常被用于实现应用程序上的各种菜单,由于该组件是底层代码实现,所以不建议你自行通过按钮和其他组件来实现菜单功能。

用法

创建一个顶级菜单,你需要先创建一个菜单实例,然后使用 add() 方法将命令和其它子菜单添加进去:

import tkinter as tk

root = tk.Tk()

def callback():
        print("~被调用啦~")

#创建一个顶级菜单
menubar = tk.Menu(root)
menubar.add_command(label = "Hello", command = callback)
menubar.add_command(label = "Quit", command = root.quit)

#显示菜单
root.config(menu = menubar)

root.mainloop()

创建一个下拉菜单(或者其他子菜单),方法也是大同小异,最主要的区别是它们最后需要添加到主菜单上(而不是窗口上):

import tkinter as tk

root = tk.Tk()

def callback():
    print("~被调用了~")

# 创建一个顶级菜单
menubar = tk.Menu(root)

# 创建一个下拉菜单“文件”,然后将它添加到顶级菜单中
filemenu = tk.Menu(menubar, tearoff=False)
filemenu.add_command(label="打开", command=callback)
filemenu.add_command(label="保存", command=callback)
filemenu.add_separator()
filemenu.add_command(label="退出", command=root.quit)
menubar.add_cascade(label="文件", menu=filemenu)

# 创建另一个下拉菜单“编辑”,然后将它添加到顶级菜单中
editmenu = tk.Menu(menubar, tearoff=False)
editmenu.add_command(label="剪切", command=callback)
editmenu.add_command(label="拷贝", command=callback)
editmenu.add_command(label="粘贴", command=callback)
menubar.add_cascade(label="编辑", menu=editmenu)

# 显示菜单
root.config(menu=menubar)

root.mainloop()

创建一个弹出菜单方法也是一致的,不过需要使用 post() 方法明确的将其显示出来:

import tkinter as tk

root = tk.Tk()

def callback():
    print("~被调用了~")

# 创建一个弹出菜单
menu = tk.Menu(root, tearoff=False)
menu.add_command(label="撤销", command=callback)
menu.add_command(label="重做", command=callback)

frame = tk.Frame(root, width=512, height=512)
frame.pack()

def popup(event):
    menu.post(event.x_root, event.y_root)

# 绑定鼠标右键
frame.bind("<Button-3>", popup)

root.mainloop()

参数

Menu(master=None, **options) (class)

master -- 父组件

**options -- 组件选项,下方表格详细列举了各个选项的具体含义和用法:

选项 含义
activebackground 设置当 Menu 处于 "active" 状态(通过 state 选项设置状态)的背景色
activeborderwidth 设置当 Menu 处于 "active" 状态(通过 state 选项设置状态)的边框宽度
activeforeground 设置当 Menu 处于 "active" 状态(通过 state 选项设置状态)的前景色
background 设置背景颜色
bg 跟 background 一样
borderwidth 指定边框宽度
bd 跟 borderwidth 一样
cursor 指定当鼠标在 Menu 上飘过的时候的鼠标样式
disabledforeground 指定当 Menu 处于 "disabled" 状态的时候的前景色
font 指定 Menu 中文本的字体
foreground 设置 Menu 的前景色
fg 跟 foreground 一样
postcommand 将此选项与一个方法相关联,当菜单被打开的时候该方法将自动被调用
relief 1. 指定边框样式
2. 默认值是 "flat"
3. 另外你还可以设置 "sunken","raised","groove" 或 "ridge"
selectcolor 指定当菜单项显示为单选按钮或多选按钮时选择中标志的颜色
tearoff 1. 默认情况下菜单可以被“撕下”(点击 IDLE 菜单上边的 --------- 试试)
2. 将该选项设置为 Flase 关闭这一特性
tearoffcommand 如果你希望当用户“撕下”你的菜单时通知你的程序,那么你可以将该选项与一个方法相关联,那么当用户“撕下”你的菜单时,Tkinter 会带着两个参数去调用你的方法(一个参数是当前窗口的 ID,另一个参数是承载被“撕下”的菜单的窗口 ID)
title 默认情况下,被“撕下”的菜单标题是其主菜单的名字,不过你也可以通过修改此项的值来修改标题

方法

add(type, **options)

-- type 参数指定添加的菜单类型,可以是:"command","cascade","checkbutton","radiobutton" 或 "separator"

-- 还可以通过 options 选项设置菜单的属性,下表列举了 options 可以使用的选项和具体含义:

选项 含义
accelerator 1. 显示该菜单项的加速键(快捷键)
2. 例如 accelerator = "Ctrl+N"
3. 该选项仅显示,并没有实现加速键的功能(通过按键绑定实现)
activebackground 设置当该菜单项处于 "active" 状态(通过 state 选项设置状态)的背景色
activeforeground 设置当该菜单项处于 "active" 状态(通过 state 选项设置状态)的前景色
background 设置该菜单项的背景颜色
bitmap 指定显示到该菜单项上的位图
columnbreak 从该菜单项开始另起一列显示
command 将该选项与一个方法相关联,当用户点击该菜单项时将自动调用此方法
compound 1. 控制菜单项中文本和图像的混合模式
2. 如果该选项设置为 "center",文本显示在图像上(文本重叠图像)
3. 如果该选项设置为 "bottom","left","right" 或 "top",那么图像显示在文本的旁边(如 "bottom",则图像在文本的下方
font 指定文本的字体
foreground 设置前景色
hidemargin 是否显示菜单项旁边的空白
image 1. 指定菜单项显示的图片
2. 该值应该是 PhotoImage,BitmapImage,或者能兼容的对象
label 指定菜单项显示的文本
menu 1. 该选项仅在 cascade 类型的菜单中使用
2. 用于指定它的下级菜单
offvalue 1. 默认情况下,variable 选项设置为 1 表示选中状态,反之设置为 0
2. 设置 offvalue 的值可以自定义未选中状态的值
onvalue 1. 默认情况下,variable 选项设置为 1 表示选中状态,反之设置为 0
2. 设置 onvalue 的值可以自定义选中状态的值
selectcolor 指定当菜单项显示为单选按钮或多选按钮时选择中标志的颜色
selectimage 如果你在单选按钮或多选按钮菜单中使用图片代替文本,那么设置该选项指定被菜单项被选中时显示的图片
state 1. 跟 text 选项一起使用,用于指定哪一个字符画下划线(例如用于表示键盘快捷键)
underline 1. 用于指定在该菜单项的某一个字符处画下划线
2. 例如设置为 1,则说明在该菜单项的第 2 个字符处画下划线
value 1. 当菜单项为单选按钮时,用于标志该按钮的值
2. 在同一组中的所有按钮应该拥有各不相同的值
3. 通过将该值与 variable 选项的值对比,即可判断用户选中了哪个按钮
4. 如在使用上有不懂具体可以参照 Radiobutton 组件的说明
variable 1. 当菜单项是单选按钮或多选按钮时,与之关联的变量
2. 如在使用上有不懂具体可以参照:Checkbutton 和 Radiobutton 组件的说明

add_cascade(**options)

-- 添加一个父菜单

-- 相当于 add("cascade", **options)

add_checkbutton(**options)

-- 添加一个多选按钮的菜单项

-- 相当于 add("checkbutton", **options)

add_command(**options)

-- 添加一个普通的命令菜单项

-- 相当于 add("command", **options)

add_radiobutton(**options)

-- 添加一个单选按钮的菜单项

-- 相当于 add("radiobutton", **options)

add_separator(**options)

-- 添加一条分割线

-- 相当于 add("separator", **options)

delete(index1, index2=None)

-- 删除 index1 ~ index2(包含)的所有菜单项

-- 如果忽略 index2 参数,则删除 index1 指向的菜单项

-- 注意:对于一个被“撕下”的菜单,你无法使用该方法

entrycget(index, option)

-- 获得指定菜单项的某选项的值

entryconfig(index, **options)

-- 设置指定菜单项的选项

-- 选项的参数及具体含义请参考上方 add() 方法

entryconfigure(index, **options)

-- 跟 entryconfig() 一样

index(index)

-- 返回与 index 参数相应的选项的序号(例如 e.index("end"))

insert(index, itemType, **options)

-- 插入指定类型的菜单项到 index 参数指定的位置

-- itemType 参数指定添加的菜单类型,可以是:"command","cascade","checkbutton","radiobutton" 或 "separator"

-- 选项的参数及具体含义请参考上方 add() 方法

insert_cascade(index, **options)

-- 在 index 参数指定的位置添加一个父菜单

-- 相当于 insert("cascade", **options)

insert_checkbutton(index, **options)

-- 在 index 参数指定的位置添加一个多选按钮

-- 相当于 insert("checkbutton", **options)

insert_command(index, **options)

-- 在 index 参数指定的位置添加一个普通的命令菜单项

-- 相当于 insert("command", **options)

insert_radiobutton(index, **options)

-- 在 index 参数指定的位置添加一个单选按钮

-- 相当于 insert("radiobutton", **options)

insert_separator(index, **options)

-- 在 index 参数指定的位置添加一条分割线

-- 相当于 insert("separator", **options)

invoke(index)

-- 调用 index 指定的菜单项相关联的方法

-- 如果是单选按钮,设置该菜单项为选中状态

-- 如果是多选按钮,切换该菜单项的选中状态

post(x, y)

-- 在指定的位置显示弹出菜单

-- 参考上方【用法】中的创建弹窗菜单的例子

type(index)

-- 获得 index 参数指定菜单项的类型

-- 返回值可以是:"command","cascade","checkbutton","radiobutton" 或 "separator"

unpost()

-- 移除弹出菜单、

yposition(index)

-- 返回 index 参数指定的菜单项的垂直偏移位置

-- 该方法的目的是为了让你精确放置相对于当前鼠标的位置弹出菜单

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • python tkinter组件摆放方式详解

    1.最小界面组成 # 导入tkinter模块 import tkinter # 创建主窗口对象 root = tkinter.Tk() # 设置窗口大小(最小值:像素) root.minsize(300,300) # 创建一个按钮组件 btn = tkinter.Button(root,text = '屠龙宝刀,点击送') btn.pack() # 加入消息循环 root.mainloop() 设置初始化界面大小 # 设置初始化界面大小 root.geometry('300x400') 2.组件

  • 对Python中TKinter模块中的Label组件实例详解

    Python2.7.4 OS-W7x86 1. 简介 Label用于在指定的窗口中显示文本和图像.最终呈现出的Label是由背景和前景叠加构成的内容. Label组件定义函数:Label(master=None, cnf={}, **kw) 其中,kw参数是用来自定义lable组件的键值对. 2. 背景自定义 背景的话,有三部分构成:内容区+填充区+边框 <1>内容区参数有:width,length用于指定区域大小,如果显示前景内容是文本,则以单个字符大小为单位:如果显示的是图像,则以像素为单

  • python tkinter组件使用详解

    这篇文章主要介绍了python tkinter组件使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.按钮 # 按钮 # bg设置背景色 btn = tkinter.Button(root,text = '按钮',bg = 'red') btn.pack() # fg设置前景色(文字颜色) btn1 = tkinter.Button(root,text = '按钮',fg = 'blue') btn1.pack() # font设置字体

  • Python Tkinter Menu组件详解

    目录 何时使用 Menu 组件? 用法 参数 方法 add_cascade(**options) add_checkbutton(**options) add_command(**options) add_radiobutton(**options) add_separator(**options) delete(index1, index2=None) entrycget(index, option) entryconfig(index, **options) entryconfigure(i

  • Python Tkinter之事件处理详解

    目录 事件绑定方法 常用事件类型 Event事件对象 事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正常”运转的关键所在,它能够将零部件之间“优雅”的贯穿起来,因此“事件处理”可谓是 GUI 程序的“灵魂”,同时它也是实现人机交互的关键. 对于“事件”这一名词,在讲解控件时也偶尔提及过,在本节我们将对 Tkinter 中的事件处理机制做更为详细的介绍. 在一款 GUI 程序中,我们将用户对软件的操作统称为“事件”,比如鼠

  • Python tkinter padx参数详解

    目录 1.padx 运行 总结 1.padx 表示在x轴方向上的边距 一般用法是padx=10,表示距离左右两边组件的长度都为10 还可以这么用,padx=(20,10),表示距离左边组件长度是20,距离右边组件长度是10 # -*- encoding=utf-8 -*- import tkinter from tkinter import * if __name__ == '__main__': w = tkinter.Tk() w.geometry('{}x{}+{}+{}'.format(

  • Python Tkinter Menu控件使用详解

    目录 创建主目录菜单 创建下拉菜单 创建弹出菜单栏 菜单按钮控件 Menu 控件(菜单控件)可以说是 GUI 中“精髓所在”,它以可视化的方式将一系列的命令进行分组,在每一个分组下又可以“隐藏”许多的程序执行命令(即功能).当打开菜单时,这些命令就会“显式”的呈现出来,方便用户进行选择,比如 Windows 系统中记事本文件(.txt文件类型)的界面: 图1:Menu菜单界面 通过使用菜单控件(Menu)可以充分地节省有限的窗口区域,让我们的界面更加简洁优雅,避免臃肿.混乱. Tkinter M

  • python 工具类之Queue组件详解用法

    目录 简述 环境 单向队列 先进后出队列 优先级队列 双向队列 完整代码 总结 简述 队列一直都是工程化开发中经常使用的数据类型,本篇文章主要介绍一下python queue的使用,会边调试代码,边说明方法内容. 环境 python: 3.6.13 单向队列 初始化单向队列 放置一些数据 可以使用full()方法判断队列是否已经塞满数据,可以通过qsize()方法查看队列内元素数量. 这时候我们从队列取出数据,看先取到的是什么. 现在队列里面只有两个数,我们再塞入3个数看一下. 这个时候我们继续

  • 微信小程序 WXDropDownMenu组件详解及实例代码

    微信小程序 WXDropDownMenu组件详解,这里给个小的示例,帮助大家学习理解, 功能: 适用于商品列表筛选与功能菜单跳转 先来看下效果图: 思路与步骤: 布局方面,整体使用dl来写,二级包在dd中,用ul li来写:交互方面,点击某一级菜单,关闭兄弟子菜单,点击某子菜单关闭所有菜单. 1.使用dt做出第一级菜单 2.使用dd嵌套第二级菜单,初始隐藏.position为absolute,使用z-index浮出页面层 /*总菜单容器*/ .menu { display: block; hei

  • Python内置模块turtle绘图详解

    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形. turtle绘图的基础知识: 1.画布(canvas) 画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置. 设置画布大小 turtle.screensize(canvwidth=None,canvheight=None,bg=None),参数分别为画布的

  • selenium+python环境配置教程详解

    一.安装Python 1)官网下载安装 2)配置环境变量(未勾选自动配置需要手动配置) 3)检查是否安装成功(交互窗口中输入Python -v) 二.Selenium 3.X +FireFox 驱动 +geckodriver 1.安装selenium: 1)W+r输入cmd,然后输入pip install selenium 2)安装FireFox,添加附加组件selenium IDE.FireBUG 3) https://github.com/mozilla/geckodriver/releas

  • 基于python图书馆管理系统设计实例详解

    写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担了所有,肝了一周多,终于完成,但这个也算是一个很大的项目了吧,对于我现在来说,写这个项目遇到了很多困难,这是真的,其中涉及到数据库的使用,就遇到了一点瓶颈, 但这不算什么,还是要被我搞定的. 梦想就像这个远处夕阳,终究触手可及! Python项目: 项目前提: 这个项目涉及到的知识点有很多, 知识串

  • OpenStack的Swift组件详解

    一:简介 背景 1.Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储服务(Object Storage Service),并于 2010 年贡献给 OpenStack 开源社区作为其最初的核心子项目之一,为其 Nova 子项目提供虚机镜像存储服务.Swift 构筑在比较便宜的标准硬件存储基础设施之上,无需采用 RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式.容器和对象读写操作,适合解

随机推荐