立即学习:https://edu.csdn.net/course/play/19711/343119?utm_source=blogtoedu

1.菜单menu:

1)弹出式菜单,类似与电脑桌面右击弹出的菜单成为弹出菜单;

2)窗体式菜单:类似于word上面的菜单栏

2.窗体菜单创建的步骤

1)创建一个菜单栏

elf.menu = tkinter.Menu(self.root)#创建菜单

2)在菜单栏中创建子菜单

        self.file_menu = tkinter.Menu(self.menu,#主菜单tearoff = False)

3)给子菜单添加菜单项及设置菜单项的名字和需要绑定的事件,

注:关闭窗体的事件可以直接调用self.root.quit()来实现

        self.file_menu.add_command(label = "打开",#设置子菜单项的名字command = self.file_handle_1#设置子菜单项需要执行的事件)self.file_menu.add_command(label = "保存",#设置菜单项的名字command = self.file_handle_2#设置子菜单项需要执行的事件)self.file_menu.add_separator()#添加子菜单项分割线self.file_menu.add_command(label = "关闭",#设置子菜单项的名字command = self.root.quit#设置子菜单项需要执行的事件

4)向菜单栏或者主菜单中添加子菜单

 #---------------------将子菜单添加到主菜单中----------------------
self.menu.add_cascade(label = "文件",#为子菜单设置名字menu = self.file_menu#将子菜单添加到主菜单中,需要添加的子菜单)

5)在窗体中显示主菜单或者说是菜单栏

self.root.config(menu = self.menu)

3.弹出菜单的创建步骤

1)创建子菜单:这步与窗体菜单的创建子菜单是一样的

self.popmenu = tkinter.Menu(self.root,tearoff = False)#创建菜单

2)给子菜单添加菜单项及菜单项的命名、事件的绑定

        self.popmenu.add_command(label = "我是弹出菜单",#弹出菜单项的名字command = self.pop_handle_1#弹出菜单项绑定的事件)

3)定义在窗体中显示弹出窗体的事件(post)

#--------------弹出菜单事件---------------------
def pop_menu_handle(self,event):self.popmenu.post(event.x_root,event.y_root)#设置弹出的位置,这是跟随着事件发生的位置

4)给窗体绑定弹出菜单弹出的事件

self.root.bind("<Button-3>",self.pop_menu_handle)#将弹出菜单作为一个事件绑定给窗体

注:菜单项事件的绑定是通过创建菜单项“command=事件”来进行绑定的

4.完整代码

import tkinter#导入创建窗体的相关模块class Mainwindow():#创建窗口类def __init__(self):self.root = tkinter.Tk()#创建主体窗口self.root.title('linlianqin')#定义窗体的名字self.root.geometry('500x500')#定义窗体的初始大小self.root.maxsize(1200,1200)#设置窗口可以显示的最大尺寸self.create_menu()self.pop_menu()self.root.bind("<Button-3>",self.pop_menu_handle)#将弹出菜单作为一个事件绑定给窗体self.root.mainloop()#显示窗口,这个代码一定要放在所有窗口设置的后面#------------创建窗体菜单------------------def create_menu(self):self.menu = tkinter.Menu(self.root)#创建菜单#-------------------------------------#创建一个子菜单1------------------------------------self.file_menu = tkinter.Menu(self.menu,#主菜单tearoff = False)#----------------创建子菜单的菜单项1-----------------self.file_menu.add_command(label = "打开",#设置子菜单项的名字command = self.file_handle_1#设置子菜单项需要执行的事件)self.file_menu.add_command(label = "保存",#设置菜单项的名字command = self.file_handle_2#设置子菜单项需要执行的事件)self.file_menu.add_separator()#添加子菜单项分割线self.file_menu.add_command(label = "关闭",#设置子菜单项的名字command = self.root.quit#设置子菜单项需要执行的事件)#关闭窗口的事件可以直接调用内置的函数#---------------------将子菜单添加到主菜单中----------------------self.menu.add_cascade(label = "文件",#为子菜单设置名字menu = self.file_menu#将子菜单添加到主菜单中,需要添加的子菜单)#---------------------------------# 创建一个子菜单2------------------------------self.edit_menu = tkinter.Menu(self.menu, #主菜单tearoff=False)#----------------创建子菜单的菜单项2-----------------self.edit_menu.add_command(label = "剪切",#设置子菜单项的名字command = self.edit_handle_1#设置子菜单项需要执行的事件)self.edit_menu.add_command(label = "复制",#设置菜单项的名字command = self.edit_handle_2#设置子菜单项需要执行的事件)self.edit_menu.add_separator()#添加子菜单项分割线self.edit_menu.add_command(label = "粘贴",#设置子菜单项的名字command = self.edit_handle_2#设置子菜单项需要执行的事件)#---------------------将子菜单添加到主菜单中----------------------self.menu.add_cascade(label = "编辑",#为子菜单设置名字menu = self.edit_menu#将子菜单添加到主菜单中,需要添加的子菜单)#---------------------主菜单的显示------------------self.root.config(menu = self.menu)#-------创建弹出菜单:弹出菜单就相当于一个子菜单一样,只不过是需要右击才会出现的,对于窗体来说,弹出菜单相当于一个事件----------------------def pop_menu(self):self.popmenu = tkinter.Menu(self.root,tearoff = False)#创建菜单self.popmenu.add_command(label = "我是弹出菜单",#弹出菜单项的名字command = self.pop_handle_1#弹出菜单项绑定的事件)self.popmenu.add_command(label = "linlianqin",#弹出菜单项的名字command = self.pop_handle_2#弹出菜单项绑定的事件)#---------------------窗体菜单的处理事件------------------------def file_handle_1(self):passdef file_handle_2(self):passdef edit_handle_1(self):passdef edit_handle_2(self):pass#---------------------弹出菜单的处理事件------------------------def pop_handle_1(self):passdef pop_handle_2(self):pass#--------------弹出菜单事件---------------------def pop_menu_handle(self,event):self.popmenu.post(event.x_root,event.y_root)#设置弹出的位置,这是跟随着事件发生的位置if __name__ == '__main__':Mainwindow()#将窗体类实例化

学习笔记(56):Python实战编程-Menu相关推荐

  1. 学习笔记(53):Python实战编程-Checkbutton

    立即学习:https://edu.csdn.net/course/play/19711/343116?utm_source=blogtoedu 复选框Checkbutton:与单选框是相对的,一些用法 ...

  2. 学习笔记(58):Python实战编程-Combobox

    立即学习:https://edu.csdn.net/course/play/19711/343121?utm_source=blogtoedu 1.下拉列表Combobox:与Listbox相比,下拉 ...

  3. 学习笔记(57):Python实战编程-Treeview

    立即学习:https://edu.csdn.net/course/play/19711/343120?utm_source=blogtoedu 1.树状结构Treeview:分为树状折叠式列表和列表显 ...

  4. 学习笔记(55):Python实战编程-Scrollbar

    立即学习:https://edu.csdn.net/course/play/19711/343118?utm_source=blogtoedu 1.滚动条ScrollBar: 当列表内容项的内容过多时 ...

  5. 学习笔记(54):Python实战编程-Scale

    立即学习:https://edu.csdn.net/course/play/19711/343117?utm_source=blogtoedu 1.滑块组件Scale: 用于定义一定范围的区间,如音量 ...

  6. 学习笔记(52):Python实战编程-Radiobutton

    立即学习:https://edu.csdn.net/course/play/19711/343115?utm_source=blogtoedu 单选钮:Radiobutton 1)相对于大部分组件而言 ...

  7. 学习笔记(51):Python实战编程-ListBox

    立即学习:https://edu.csdn.net/course/play/19711/343113?utm_source=blogtoedu listbox 知识点: 1)创建listbox: se ...

  8. 学习笔记(49):Python实战编程-place布局

    立即学习:https://edu.csdn.net/course/play/19711/343111?utm_source=blogtoedu 1.place布局: 1)最灵活的布局方式,是根据坐标点 ...

  9. 学习笔记(48):Python实战编程-grid布局

    立即学习:https://edu.csdn.net/course/play/19711/343110?utm_source=blogtoedu grid布局:根据表结构进行的布局,索引为0行0列开始, ...

最新文章

  1. 英特尔虚拟化技术发展蓝图
  2. java自定义类怎么比大小_实战:Java 扑克牌比较游戏
  3. 太热了,谈机房空调散散热
  4. 在MyEclipse中添加项目遇到Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules...
  5. 医学图像处理期末复习(三)
  6. 从AI到IA,你愿意买一个机器人伴侣同居吗?
  7. 漫画:这份程序员自画像,是不是你的?
  8. 006 认识BeanNameAware
  9. 品高打造西科大教育云,带你看懂高教云建设之路
  10. Linux App Summit(LAS)社区 KDE Gnome
  11. 说说vue-cli中使用flexible和px2rem-loader
  12. 洛谷P2678 跳石头
  13. CamOdoCal_2013-IROS_多个普通相机和里程计的内参和外参自动标定
  14. ubuntu20.04安装搜狗输入法
  15. Endnote IEEE TRANSACTIONS ON INDUSTRIAL ELECTRONICS/TIE/TPEL 参考文献格式模板
  16. pandas库与numpy库
  17. Rayman的绝顶之路——Leetcode每日一题打卡11
  18. automation服务器不能创建对象
  19. ORA-03113: end-of-file on communication channel 解决方法
  20. Clojure基础语法学习笔记(一)

热门文章

  1. 手把手玩转win8开发系列课程(2)
  2. 【转】Tomcat+MyEclipse
  3. MS SQL 不常用但却十分有用的一些语法
  4. Mysql查询结果只有一条的情况下把值赋值给变量,再用if else 流程判断
  5. jdk8永久代从方法区移除的验证
  6. mybatis Example 使用方法
  7. vue node --- 前后端联系的知识梳理
  8. angular --- ngDialog关闭当前层
  9. Node --- Promise中的多异步协作
  10. JavaScript 基础知识 - BOM篇