zoukankan      html  css  js  c++  java
  • GUI tkinter (Menu)菜单项篇

    """
    添加顶层菜单:
    1、我们可以使用Menu类来新建一个菜单,Menu和其他的组件一样,第一个是parent,这里通常可以为窗口
    2、然后我们可以用add_command方法来为它添加菜单项,
    如果该菜单是顶层菜单,则添加的菜单项依次向右添加。
    如果该菜单是顶层菜单的一个菜单项,则它添加的是下拉菜单的菜单项。
    3、add_command 中的参数常用的有 label 属性,用来指定的 是菜单项的名称,command 属性用来指定被点击的时候调用的方法,
    acceletor 属性指定的是快捷键,underline 属性 是是否拥有下划线。
    4、最后可以用窗口的 menu 属性指定我们使用哪一个作为它 的顶层菜单。



    ************有子菜单的情况*************
    1、如果有子菜单,则情况稍微复杂点,这个时候,我们需 要使用 add_cascade,cascade 可以理解为“级联”,即它 的作用只是为了引出后面的菜单。
    2、add_cascade 的一个很重要的属性就是 menu 属性,它指 明了要把那个菜单级联到该菜单项上,当然,还必不可少 的就是 label 属性,用于指定该菜单项的名称。
    3、我们先新建一个 Menu 的实例,然后使用 add_command 来 添加菜单项,这样等该菜单建立完毕,我们要把它作为另 一个菜单项的子菜单,就需要使用 add_cascade 方法

    """

    from tkinter import *

    root = Tk()
    root.wm_title("菜单")
    root.geometry("400x300+300+100")

    menubar = Menu(root)

    # for item in ['文件','编辑','视图','关于']:
    # # add_command 添加菜单项
    # menubar.add_command(label = item)

    fmenu = Menu(menubar)
    for item in ['新建','打开','保存','另存为']:
    fmenu.add_command(label = item)

    emenu = Menu(menubar)
    for item in ['复制','粘贴','剪切']:
    emenu.add_command(label = item)

    vmenu = Menu(menubar)
    for item in ['默认视图','新式视图']:
    vmenu.add_command(label = item)

    amenu = Menu(menubar)
    for item in ['版权信息','其他说明']:
    amenu.add_command(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.config(menu=menubar)#将root根窗口的顶级菜单设置为menu
    root.mainloop()
    运行结果如下:


    """
    ************弹出菜单*****************
    1.弹出菜单又叫“上下文菜单”,也叫“右键菜单”,它 通常是鼠标单击右键产生的菜单,因此会有“右键菜单” 的说法。
    2.其实很多界面库里面都是给出了弹出菜单的简单的制作 方法的,但是 tkinter 里面我们却只能使用比较原始的事 件绑定的方式去做。
    3.大体思路就是:我们先新建一个菜单,然后向菜单项中 添加各种功能,最后我们监听鼠标右键消息,如果是鼠标 右键被单击,此时可以根据需要判断下鼠标位置来确定是 哪个弹出菜单被弹出,然后使用 Menu 类的 pop 方法来弹出 菜单。

    ************提前说明*************
    1.Menu 类里面有一个 post 方法,它接收两个参数,即 x 和 y 坐标,它会在相应的位置弹出菜单。
    2.还记得用 bind 方法来绑定事件吗?而且要记得鼠标右键 是用的<Button-3>。

    """

    from tkinter import *

    def test():
    global root
    Label(root,text = "测试").pack()

    root = Tk()
    menubar = Menu(root)

    for x in ['vb','c','java','php']:
    menubar.add_command(label = x)

    menubar.add_command(label = 'python',command = test)

    # 插入分割线
    # 插入分割线和插入正常的菜单项操作很相似,只是使用 的方法是 add_separator,该方法无需参数。
    menubar.add_separator()

    def pop(event):
    menubar.post(event.x_root,event.y_root)

    root.bind("<Button-3>",pop)
    root.mainloop()




    """
    **************checkbutton 与 radiobutton********
    1.checkbutton 原本是指“复选按钮”,radiobutton 原本 是指“单选按钮”。
    2.单选按钮与复选按钮是相对来说的,即在这一组中,单 选按钮中只能有一个是被选定的,即一个人的性别是女的, 就一定不是男的,但是复选按钮对应的情况则是可以有多 个同时被选定,比如一个人即可以喜欢篮球,也可以喜欢 足球,还有可能喜欢乒乓球,等等。
    3.在菜单中,也有类似的概念,即单选菜单和复选菜单。 它们分别用 add_radiobutton 和 add_checkbutton 来分别 添加。
    4.这两种菜单都是如果一旦被选定,那么前面会有一个类 似于对号的标记出现,checkbutton 可以多个同时被选定, 但是 radiobutton 却只能被选定一个,即这个被选定了, 会自动取消前一个的选定。

    """

    from tkinter import *

    root = Tk()
    m = Menu(root)
    m2 = Menu(m)
    for item in ['python','perl','php','ruby']:
    m2.add_checkbutton(label = item)
    m2.add_separator()

    for item in ['java','c++','c']:
    m2.add_radiobutton(label = item)

    m.add_cascade(label = 'lan',menu = m2)
    root['menu'] = m
    root.mainloop()
    运行结果如下:
     

  • 相关阅读:
    subprocess(子进程模块)
    logging日志模块,hashlib hash算法相关的库,
    json pickle xml shelve configparser
    os与操作系统进行交互,sys解释器相关,random随机数,shutil解压和压缩
    目录规范+时间模块
    vue的组件
    drf 分页
    包和模块
    docker镜像&nginx配置
    匿名函数 递归 二分法 面向过程编程
  • 原文地址:https://www.cnblogs.com/jerryspace/p/9836689.html
Copyright © 2011-2022 走看看