zoukankan      html  css  js  c++  java
  • TKinter之菜单

    菜单的分类也较多,通常可以分为下拉菜单、弹出菜单。

    1、使用Menu类创建一个菜单

    2、add_command添加菜单项,如果该菜单是顶层菜单,则添加的菜单项依次向右添加。 如果该菜单时顶层菜单的一个菜单项,则它添加的是下拉 菜单的菜单项。

      属性:  

        label:指定菜单的名称

        command:被点击时调用的方法

        acceletor:快捷键

        underline:是否拥有下划线

    3、窗口的menu属性:指定顶级菜单项

    应用场景一:一个最简单的示例,创建一个顶级菜单窗口。

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    from Tkinter import *
    #定义一个顶级大窗口
    root = Tk()
    #在大窗口下定义一个菜单实例
    menubar = Menu(root)
    #给菜单实例增加菜单项
    for each in ['文件','视图','编辑','关于']:
        menubar.add_command(label=each)
    #菜单实例应用到大窗口中
    root['menu']=menubar
    root.mainloop()
    

      效果图:

    应用场景二、为顶级菜单级联子菜单项

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    from Tkinter import *
    #定义一个顶级大窗口
    root = Tk()
    #在大窗口下定义一个顶级菜单实例
    menubar = Menu(root)
    
    #在顶级菜单实例下创建子菜单实例
    fmenu = Menu(menubar)
    for each in ['新建','打开','保存','另存为']:
        fmenu.add_command(label=each)
    
    vmenu = Menu(menubar)
    #为每个子菜单实例添加菜单项
    for each in ['复制','粘贴','剪切']:
        vmenu.add_command(label=each)
    
    emenu = Menu(menubar)
    for each in ['默认视图','新式视图']:
        emenu.add_command(label=each)
    
    amenu = Menu(menubar)
    for each in ['版权信息','联系我们']:
        amenu.add_command(label=each)
    
    #为顶级菜单实例添加菜单,并级联相应的子菜单实例
    menubar.add_cascade(label='文件',menu=fmenu)
    menubar.add_cascade(label='视图',menu=vmenu)
    menubar.add_cascade(label='编辑',menu=emenu)
    menubar.add_cascade(label='关于',menu=amenu)
    
    #顶级菜单实例应用到大窗口中
    root['menu']=menubar
    root.mainloop()
    

      效果图:

     应用场景三、右键菜单

     1.Menu 类里面有一个 post 方法,它接收两个参数,即 x 和 y 坐标,它会在相应的位置弹出菜单。

     2.利用 Menu 的 post 方法,还有 bind 方法

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    from Tkinter import *
    #在大窗口生成一个标签并布局上去
    def kong():
        Label(root,text='I love Python').pack()
    
    #生成一个大窗口实例
    root = Tk()
    #生成一个顶级菜单实例
    menubar = Menu(root)
    #生成顶级菜单实例的菜单项
    for x in ['vb','vc','java','python','php']:
        menubar.add_command(label=x)
    #增加顶级菜单项的同时,绑定一个事件(在root上创建一个标签并布局上去)
    menubar.add_command(label='django',command=kong)
    #定义一个事件
    def pop(event):
        menubar.post(event.x_root,event.y_root)
    #在root大窗口绑定一个右键事件(在当前坐标上post出一个菜单)
    root.bind("<Button-3>",pop)
    root.mainloop()
    

      效果图:

    右键时会弹出一个菜单,选择django后,会在root窗口布局一个标签。

    应用场景四:分割线

    add_separator():无参数

    用于对菜单项中的菜单分类

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    from Tkinter import *
    #定义一个root大窗口实例
    root = Tk()
    #在root大窗口定义一个顶级菜单 
    menuroot = Menu(root)
    #在顶级菜单下定义一个子菜单
    menusp = Menu(menuroot)
    #给子菜单添加菜单项
    for x in ['linux','unix','opoos']:
        menusp.add_command(label=x)
    #给子菜单添加分割线
    menusp.add_separator()
    #继续给子菜单添加菜单项
    for x in ['python','c++','vb','php']:
        menusp.add_command(label=x)
    #子菜单绑定到顶级菜单 
    menuroot.add_cascade(label='lang',menu=menusp)
    #root大窗口应用此顶级菜单
    root['menu']=menuroot
    root.mainloop()
    

      

    效果图:

    应用场景五:单选框(add_radiobutton)与复选框(add_checkbutton)

    代码与上面的分割线类似,只是将add_command改为了add_radiobutton

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    from Tkinter import *
    #定义一个root大窗口实例
    root = Tk()
    #在root大窗口定义一个顶级菜单
    menuroot = Menu(root)
    #在顶级菜单下定义一个子菜单
    menusp = Menu(menuroot)
    #给子菜单添加菜单项
    for x in ['linux','unix','opoos']:
        menusp.add_radiobutton(label=x)
    #给子菜单添加分割线
    menusp.add_separator()
    #继续给子菜单添加菜单项
    for x in ['python','c++','vb','php']:
        menusp.add_checkbutton(label=x)
    #子菜单绑定到顶级菜单
    menuroot.add_cascade(label='lang',menu=menusp)
    #root大窗口应用此顶级菜单
    root['menu']=menuroot
    root.mainloop()
    

     效果图:

    上面是单选效果,下面是多选效果





  • 相关阅读:
    reids 持久化
    center os 下redis安装以及基本使用
    MongoDB安装(Window)
    mysql中文乱码解决办法
    github托管代码
    MySQL表损坏修复【Incorrect key file for table】
    运维杂记-02
    配置ssh秘钥登陆
    nginx解决跨域问题
    运维杂记-01
  • 原文地址:https://www.cnblogs.com/kongzhagen/p/6148737.html
Copyright © 2011-2022 走看看