python之menu
只有主菜单没有二级菜单的例子:

from tkinter import * root=Tk() root.wm_title('同济大学财务管理系统') menubar=Menu(root)#指定菜单实例的父窗口是root for item in ['文件','编辑','视图','关于']: menubar.add_command(label=item) root['menu']=menubar#指定主窗口的'menu'属性为刚刚创建的menubar root.mainloop()
主菜单携带子菜单的例子:

from tkinter import * root=Tk() menubar=Menu(root)# it produces a menu instance fmenu=Menu(menubar) for item in ['新建','打开','保存','另存为']: fmenu.add_cascade(label=item) emenu=Menu(menubar) for item in ['复制','粘贴','剪切']: emenu.add_cascade(label=item) vmenu=Menu(menubar) for item in ['默认视图','新式视图']: vmenu.add_cascade(label=item) amenu=Menu(menubar) for item in ['版权信息','其他说明']: amenu.add_cascade(label=item) menubar.add_cascade(label='文件',menu=fmenu) menubar.add_cascade(label='编辑',menu=emenu) menubar.add_cascade(label='视图',menu=vmenu) menubar.add_cascade(label='关于',menu=amenu) root['menu']=menubar root.mainloop()
制作弹出式菜单的例子:

from tkinter import * def xianshi(): #global root x1=Label(root,text='I love China',background='blue') x1.pack() root=Tk()#制作一个盛所有窗口的容器 menubar=Menu(root)#制作一个菜单实例 for x in ['vb','c','java','php','c++']: menubar.add_command(label=x) menubar.add_command(label='python',command=xianshi) def pop(event): menubar.post(event.x_root,event.y_root) root.bind('<Button-3>',pop) root.mainloop()
带分割横线的二级菜单:

from tkinter import * root=Tk() m=Menu(root)#创建一个菜单实例m,这个菜单实例依附在主窗口root上面。 m2=Menu(m)#创建一个二级菜单实例,这个实例依附在菜单m上,因为Menu的参数是widget,它是一个窗 #口,m也算是一个窗口了,只不过是菜单窗口。 for item in ['python','perl','php','ruby']: m2.add_command(label=item)#菜单m2调用add_command方法,用来增加菜单项目标签 m2.add_separator()#添加分割线,不需要任何参数 for item in ['java','c++','c']: m2.add_command(label=item)#增加二级菜单项目标签 m.add_cascade(label='语言',menu=m2)#给依附在root容器上的一级菜单m增加一个二级菜单 root['menu']=m#给root增加菜单属性,让其拥有一级菜单 root.mainloop()
增加复选按钮与单选按钮:

from tkinter import * root=Tk() m=Menu(root)#创建一个菜单实例m,这个菜单实例依附在主窗口root上面。 m2=Menu(m)#创建一个二级菜单实例,这个实例依附在菜单m上,因为Menu的参数是widget,它是一个窗 #口,m也算是一个窗口了,只不过是菜单窗口。 for item in ['python','perl','php','ruby']: m2.add_checkbutton(label=item)#菜单m2调用add_command方法,用来增加菜单项目标签,复选按钮 m2.add_separator()#添加分割线,不需要任何参数 for item in ['java','c++','c']: m2.add_radiobutton(label=item)#增加二级菜单项目标签,单选按钮 m.add_cascade(label='语言',menu=m2)#给依附在root容器上的一级菜单m增加一个二级菜单 root['menu']=m#给root增加菜单属性,让其拥有一级菜单 root.mainloop()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理