菜单用语在界面中设置菜单,和多级子菜单
在tkinter中,菜单组件的添加与其他组件有所不同。 菜单需要使用所创建的主窗口的 config方法添加到窗口中。
这个小工具的目标是,让我们来创建我们的应用程序,可以通过使用各种菜单。核心功能,提供的方式来创建三个菜单类型:弹出式,顶层,和下拉
thinter.Menu(用于存放的父组件,属性参数...)
具有以下属性
activebackground | 背景颜色,当它在鼠标下时将出现在选择上。 |
activeborderwidth | 指定在鼠标下方选择的边框的宽度。默认值为1像素。 |
activeforeground | 当它在鼠标下方时,将出现在选择上的前景色。 |
background(bg) | 用于不在鼠标下的选择的背景颜色。 |
borderwidth(bd) | 围绕所有选择的边框的宽度。默认值为1。 |
cursor | 当鼠标在选项上方时出现的光标,但仅当菜单已被关闭时显示。 |
disabledforeground | 状态为DISABLED的项目的文本颜色。 |
font | 设置文本的字体 |
foreground(fd) | 用于不在鼠标下的选择的前景色。 |
postcommand | 您可以将此选项设置为过程,并且每当有人启动此菜单时,将调用该过程。 |
relief | 菜单的默认3-D效果为relief = RAISED。 |
image | 在这个menubutton上显示一个图像。 |
selectcolor | 指定在检查按钮和单选按钮中显示的颜色。 |
tearoff | 通常情况下,菜单可以被拆除,如果设置tearoff = 0,菜单将不会有撕纸功能,并且从0位置开始添加选择。 |
title | 通常,撕下菜单窗口的标题将与导致此菜单的menubutton或级联文本相同。如果要更改该窗口的标题,请将标题选项设置为该字符串。 |
具有以下方法
add_command(选项) | 在菜单中添加一个菜单项。 |
add_radiobutton(选项) | 创建单选按钮菜单项。 |
add_checkbutton(选项) | 创建一个检查按钮菜单项。 |
add_cascade(选项) | 通过将给定的菜单与父菜单相关联来创建新的分层菜单 |
add_separator() | 在菜单中添加分隔线。 |
add(类型,选项) | 在菜单中添加一个特定类型的菜单项。 |
delete(startindex [,endindex]) | 删除从startindex到endindex的菜单项。 |
entryconfig(index,options) | 允许您修改由索引标识的菜单项,并更改其选项。 |
index(item) | 返回给定菜单项标签的索引号。 |
insert_separator(index) | 在index指定的位置插入一个新的分隔符。 |
invoke(index) | 调用与位置索引选择相关联的命令回调。如果一个检查按钮,其状态在设置和清除之间切换; 如果一个单选按钮,那个选择是设置的。 |
type(index) | 返回由index指定的选项的类型:“cascade”,“checkbutton”,“command”,“radiobutton”,“separator”或“tearoff”。 |
下拉菜单的菜单项
add_command添加菜单项,如果该菜单是顶层菜单,则添加的菜单项依次向右添加。 如果该菜单时顶层菜单的一个菜单项,则它添加的是下拉 菜单的菜单项。
属性:
label:指定菜单的名称
command:被点击时调用的方法
acceletor:快捷键
underline:是否拥有下划线
注意;
submenu = Tkinter.Menu(menu, tearoff = 0)
它的值只有0和1,将tearoff设置为1以后,就是表明这个菜单是可以独立出来的,如果是0的话就不可以独立出来。
EG1:
# 随机出一个数(多级菜单)
from tkinter import *
root = Tk()
root.title("随机一个数")
# Text(root,width=50).grid()
def hello():
print("hello")
menu1 = Menu(root, tearoff=0) #1的话多了一个虚线,如果点击的话就会发现,这个菜单框可以独立出来显示
menu1.add_command(label="第一个")
menu1.add_separator()
menu1.add_command(label="第二个")
menu1.add_separator()
menu1.add_command(label="第三个")
menu1.add_separator()
menu1.add_command(label="第四个")
mebubar = Menu(root)
mebubar.add_command(label="你好", command=hello)
mebubar.add_cascade(label="分级", menu=menu1) #原理:先在主菜单中添加一个菜单,与之前创建的菜单进行绑定。
mebubar.add_command(label="退出", command=root.quit)
root.config(menu=mebubar)
root.mainloop()
实行结果:
EG2:在子菜单中创建单选框,复选框
from tkinter import *
root = Tk()
# 创建主菜单
menu_main = Menu(root)
# 创建子菜单
menu1 = Menu(menu_main)
# 创建单选框
for i in ["c", "c++", "java", "c#", "python", "php"]:
menu1.add_radiobutton(label=i)
# 添加分隔符
menu1.add_separator()
# 添加复选框
for i in ["1", "2", "3", "4", "5", "6"]:
menu1.add_checkbutton(label=i)
menu_main.add_cascade(label="语言", menu=menu1)
root.config(menu=menu_main)
root.mainloop()
实行结果:
EG3: 下拉框
import tkinter
from tkinter import ttk
def go(*args): # 处理事件,*args表示可变参数
print(comboxlist.get()) # 打印选中的值
win = tkinter.Tk() # 构造窗体
comvalue = tkinter.StringVar() # 窗体自带的文本,新建一个值
comboxlist = ttk.Combobox(win, textvariable=comvalue) # 初始化
comboxlist["values"] = ("1", "2", "3", "4")
comboxlist.current(0) # 选择第一个
comboxlist.bind("<>", go) # 绑定事件,(下拉列表框被选中时,绑定go()函数)
comboxlist.pack()
win.mainloop() # 进入消息循环
实行结果:
参考:
https://www.jianshu.com/p/19d96f7107a0
https://my.oschina.net/u/2403163/blog/491077?p=1