tkinter之菜单Menu

1、基本用法

Menu() 创建菜单

add_command() 添加命令label

复制代码
from tkinter import *
from tkinter import messagebox


def do(name):
    messagebox.showinfo('提示信息', f'你点击了{name}')


win = Tk()  # 窗口
menu_main = Menu(win)  # 创建主菜单
menu_sub = Menu(menu_main)  # 创建子菜单
menu_sub.add_command(label='子菜单1', command=lambda x='子菜单1': do(x))  # 一个子菜单
menu_sub.add_command(label='子菜单2', command=lambda x='子菜单2': do(x))  # 一个子菜单
menu_sub.add_command(label='子菜单3', command=lambda x='子菜单3': do(x))  # 一个子菜单
menu_main.add_cascade(label='主菜单', menu=menu_sub)  # 添加子菜单到主菜单
win.config(menu=menu_main)  # 设置主菜单到界面
win.mainloop()
复制代码

运行截图

 2、多个主菜单

复制代码
from tkinter import *
from tkinter import messagebox


def do(name):
    messagebox.showinfo('提示信息', f'你点击了{name}')


win = Tk()  # 窗口
menu = Menu(win)  # 创建主菜单
menu_main = Menu(menu)  # 创建主菜单1
menu_main.add_command(label='子菜单a', command=lambda: do('子菜单a'))  # 子菜单
menu_main.add_command(label='子菜单b', command=lambda: do('子菜单b'))  # 子菜单
menu_main.add_command(label='子菜单c', command=lambda: do('子菜单c'))  # 子菜单

menu_main2 = Menu(menu)  # 创建主菜单2
menu_main2.add_command(label='子菜单A', command=lambda: do('子菜单A'))  # 子菜单
menu_main2.add_command(label='子菜单B', command=lambda: do('子菜单B'))  # 子菜单
menu_main2.add_command(label='子菜单C', command=lambda: do('子菜单C'))  # 子菜单

menu.add_cascade(label='主菜单1', menu=menu_main)  # 添加主菜单1到主菜单上
menu.add_cascade(label='主菜单2', menu=menu_main2)  # 添加主菜单2到主菜单上
win.config(menu=menu)  # 设置主菜单到界面
win.mainloop()
复制代码

运行截图

 3、二级子菜单(多级子菜单同理)

复制代码
from tkinter import *
from tkinter import messagebox


def do(name):
    messagebox.showinfo('提示信息', f'你点击了{name}')


win = Tk()  # 窗口
menu = Menu(win)  # 创建主菜单
menu_main = Menu(menu)  # 创建主菜单1
menu_main.add_command(label='子菜单a', command=lambda: do('子菜单a'))  # 子菜单
menu_main.add_command(label='子菜单b', command=lambda: do('子菜单b'))  # 子菜单
menu_main.add_command(label='子菜单c', command=lambda: do('子菜单c'))  # 子菜单

menu_main2 = Menu(menu)  # 创建主菜单2
menu_main2.add_command(label='子菜单A', command=lambda: do('子菜单A'))  # 子菜单
menu_main2.add_command(label='子菜单B', command=lambda: do('子菜单B'))  # 子菜单
menu_main2.add_command(label='子菜单C', command=lambda: do('子菜单C'))  # 子菜单

menu_main21 = Menu(menu_main2)  # 创建主菜单21
menu_main21.add_command(label='子菜单1', command=lambda: do('子菜单1'))  # 子菜单
menu_main21.add_command(label='子菜单2', command=lambda: do('子菜单2'))  # 子菜单
menu_main21.add_command(label='子菜单3', command=lambda: do('子菜单3'))  # 子菜单
menu_main2.add_cascade(label='子菜单D', menu=menu_main21)

menu.add_cascade(label='主菜单1', menu=menu_main)  # 添加主菜单1到主菜单上
menu.add_cascade(label='主菜单2', menu=menu_main2)  # 添加主菜单2到主菜单上
win.config(menu=menu)  # 设置主菜单到界面
win.mainloop()
复制代码

运行截图

4、添加分隔符

使用add_separator()添加分隔符

复制代码
from tkinter import *
from tkinter import messagebox


def do(name):
    messagebox.showinfo('提示信息', f'你点击了{name}')


win = Tk()  # 窗口
menu_main = Menu(win)  # 创建主菜单
menu_sub = Menu(menu_main)  # 创建子菜单
menu_sub.add_command(label='子菜单1', command=lambda x='子菜单1': do(x))  # 一个子菜单
menu_sub.add_command(label='子菜单2', command=lambda x='子菜单2': do(x))  # 一个子菜单
menu_sub.add_command(label='子菜单3', command=lambda x='子菜单3': do(x))  # 一个子菜单
menu_sub.add_separator()
menu_sub.add_command(label='子菜单4', command=lambda x='子菜单4': do(x))  # 一个子菜单
menu_main.add_cascade(label='主菜单', menu=menu_sub)  # 添加子菜单到主菜单
win.config(menu=menu_main)  # 设置主菜单到界面
win.mainloop()
复制代码

运行截图

 5、去掉虚线

上面的例子中每个主菜单或子菜单都有一个虚线,可以通过设置tearoff=0去掉。

虚线的意思是菜单是否可以独立出来为一个窗口显示,如果设置tearoff=0,表示不可以独立出来,设置tearoff=1,表示可以独立出来。

点击虚线,菜单就独立出来了

复制代码
from tkinter import *
from tkinter import messagebox


def do(name):
    messagebox.showinfo('提示信息', f'你点击了{name}')


win = Tk()  # 窗口
menu_main = Menu(win)  # 创建主菜单
menu_sub = Menu(menu_main, tearoff=0)  # 创建子菜单
menu_sub.add_command(label='子菜单1', command=lambda x='子菜单1': do(x))  # 一个子菜单
menu_sub.add_command(label='子菜单2', command=lambda x='子菜单2': do(x))  # 一个子菜单
menu_sub.add_command(label='子菜单3', command=lambda x='子菜单3': do(x))  # 一个子菜单
menu_sub.add_separator()
menu_sub.add_command(label='子菜单4', command=lambda x='子菜单4': do(x))  # 一个子菜单
menu_main.add_cascade(label='主菜单', menu=menu_sub)  # 添加子菜单到主菜单
win.config(menu=menu_main)  # 设置主菜单到界面
win.mainloop()
复制代码

运行截图(去掉虚线,菜单不可独立出来,左图)(菜单独立出来效果截图,中图和右图)

 

posted @   南风丶轻语  阅读(1165)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示