Python 3 - Tkinter 菜单

  • 简述

    这个小部件的目标是允许我们创建我们的应用程序可以使用的各种菜单。核心功能提供了创建三种菜单类型的方法:弹出菜单、顶层菜单和下拉菜单。
    也可以使用其他扩展小部件来实现新类型的菜单,例如OptionMenu小部件,它实现了一种特殊类型,可以在选择中生成项目的弹出列表。
  • 句法

    这是创建此小部件的简单语法 -
    
     w = Menu ( master, option, ... )
    
  • 参数

    • master− 这代表父窗口。
    • options− 这是此小部件最常用选项的列表。这些选项可以用作以逗号分隔的键值对。
    序号 选项和描述
    1
    activebackground
    当鼠标在鼠标下方时,将出现在选项上的背景颜色。
    2
    activeborderwidth
    指定在鼠标下方时围绕选择绘制的边框的宽度。默认为 1 像素。
    3
    activeforeground
    当鼠标位于选择项下方时将出现在选择项上的前景色。
    4
    bg
    不在鼠标下方的选项的背景颜色。
    5
    bd
    所有选项周围的边框宽度。默认值为 1。
    6
    cursor
    当鼠标悬停在选项上时出现的光标,但只有当菜单被撕掉时才会出现。
    7
    disabledforeground
    状态为 DISABLED 的项目的文本颜色。
    8
    font
    文本选择的默认字体。
    9
    fg
    用于不在鼠标下方的选项的前景色。
    10
    postcommand
    您可以将此选项设置为一个过程,每次有人调出此菜单时都会调用该过程。
    11
    relief
    菜单的默认 3-D 效果是 relief = RAISED。
    12
    image
    在此菜单按钮上显示图像。
    13
    selectcolor
    指定选中按钮和单选按钮时显示的颜色。
    14
    tearoff
    通常情况下,一个菜单可以被撕掉,选择列表中的第一个位置(位置 0)被撕掉的元素占据,额外的选择从位置 1 开始添加。如果设置 tearoff = 0,菜单不会有撕裂功能,选择将从位置 0 开始添加。
    15
    title
    通常,可撕下菜单窗口的标题将与菜单按钮或引导至此菜单的层叠的文本相同。如果要更改该窗口的标题,请将标题选项设置为该字符串。
  • 方法

    这些方法在 Menu 对象上可用 -
    序号 选项和描述
    1
    add_command (options)
    向菜单添加菜单项。
    2
    add_radiobutton( options )
    创建单选按钮菜单项。
    3
    add_checkbutton( options )
    创建复选按钮菜单项。
    4
    add_cascade(options)
    通过将给定菜单关联到父菜单来创建新的分层菜单
    5
    add_separator()
    向菜单添加分隔线。
    6
    add( type, options )
    将特定类型的菜单项添加到菜单。
    7
    delete( startindex [, endindex ])
    删除从 startindex 到 endindex 的菜单项。
    8
    entryconfig( index, options )
    允许您修改由索引标识的菜单项,并更改其选项。
    9
    index(item)
    返回给定菜单项标签的索引号。
    10
    insert_separator ( index )
    在 index 指定的位置插入一个新的分隔符。
    11
    invoke ( index )
    调用与位置索引处的选择关联的命令回调。如果是复选按钮,它的状态在设置和清除之间切换;如果是单选按钮,则该选项已设置。
    12
    类型(索引)
    返回索引指定的选择类型:“cascade”、“checkbutton”、“command”、“radiobutton”、“separator”或“tearoff”。
  • 例子

    自己尝试以下示例 -
    
    # !/usr/bin/python3
    from tkinter import *
    def donothing():
       filewin = Toplevel(root)
       button = Button(filewin, text="Do nothing button")
       button.pack()
       
    root = Tk()
    menubar = Menu(root)
    filemenu = Menu(menubar, tearoff = 0)
    filemenu.add_command(label="New", command = donothing)
    filemenu.add_command(label = "Open", command = donothing)
    filemenu.add_command(label = "Save", command = donothing)
    filemenu.add_command(label = "Save as...", command = donothing)
    filemenu.add_command(label = "Close", command = donothing)
    filemenu.add_separator()
    filemenu.add_command(label = "Exit", command = root.quit)
    menubar.add_cascade(label = "File", menu = filemenu)
    editmenu = Menu(menubar, tearoff=0)
    editmenu.add_command(label = "Undo", command = donothing)
    editmenu.add_separator()
    editmenu.add_command(label = "Cut", command = donothing)
    editmenu.add_command(label = "Copy", command = donothing)
    editmenu.add_command(label = "Paste", command = donothing)
    editmenu.add_command(label = "Delete", command = donothing)
    editmenu.add_command(label = "Select All", command = donothing)
    menubar.add_cascade(label = "Edit", menu = editmenu)
    helpmenu = Menu(menubar, tearoff=0)
    helpmenu.add_command(label = "Help Index", command = donothing)
    helpmenu.add_command(label = "About...", command = donothing)
    menubar.add_cascade(label = "Help", menu = helpmenu)
    root.config(menu = menubar)
    root.mainloop()
    
  • 结果

    执行上述代码时,会产生以下结果 -
    传统知识菜单