[关闭]
@yanglt7 2018-11-16T15:07:59.000000Z 字数 3774 阅读 683

Tkinter06_Menu & Menubutton & OptionMenu

Tkinter


Menu 组件用于实现顶级菜单、下拉菜单和弹出菜单。由于该组件是底层代码实现和优化,所以不建议自行通过按钮和其他组件来实现菜单功能。

例 33 创建一个顶级菜单,需要先创建一个菜单实例,然后使用 add() 方法将命令和其他子菜单添加进去。

  1. from tkinter import *
  2. root = Tk()
  3. def callback():
  4. print("你好~")
  5. # 创建一个顶级菜单
  6. menubar = Menu(root)
  7. menubar.add_command(label="hello", command=callback)
  8. menubar.add_command(label="quit", command=root.quit)
  9. # 显示菜单
  10. root.config(menu=menubar)
  11. mainloop()

此处输入图片的描述

例 34 创建一个下拉菜单(或者其他子菜单),方法也是大同小异,最主要的区别是它们最后需要添加到主菜单上(而不是窗口上)。

  1. from tkinter import *
  2. root = Tk()
  3. def callback():
  4. print("你好~")
  5. # 创建一个顶级菜单
  6. menubar = Menu(root)
  7. # 创建一个下拉菜单“文件”,然后将它添加到顶级菜单中
  8. filemenu = Menu(menubar, tearoff=False)
  9. filemenu.add_command(label="打开", command=callback)
  10. filemenu.add_command(label="保存", command=callback)
  11. filemenu.add_separator()
  12. filemenu.add_command(label="退出", command=root.quit)
  13. menubar.add_cascade(label="文件", menu=filemenu)
  14. # 创建另一个下拉菜单“编辑”,然后将它添加到顶级菜单中
  15. editmenu = Menu(menubar, tearoff=False)
  16. editmenu.add_command(label="剪切", command=callback)
  17. editmenu.add_command(label="拷贝", command=callback)
  18. editmenu.add_command(label="粘贴", command=callback)
  19. menubar.add_cascade(label="编辑", menu=editmenu)
  20. # 显示菜单
  21. root.config(menu=menubar)
  22. mainloop()

此处输入图片的描述

将 tearoff 改为 True 之后,“文件”菜单增加了一行小横杠。

  1. filemenu = Menu(menubar, tearoff=True)

此处输入图片的描述

例 35 创建一个弹出菜单方法也是一致的,不过需要使用 post() 方法明确地将其显示出来。

  1. from tkinter import *
  2. root = Tk()
  3. def callback():
  4. print("你好~")
  5. # 创建一个弹出菜单
  6. menubar = Menu(root)
  7. menubar.add_command(label="撤销", command=callback)
  8. menubar.add_command(label="重做", command=root.quit)
  9. frame = Frame(root, width=512, height=512)
  10. frame.pack()
  11. def popup(event):
  12. menubar.post(event.x_root, event.y_root)
  13. # 绑定鼠标右键
  14. frame.bind("<Button-3>", popup)
  15. mainloop()

此处输入图片的描述

例 36 这个菜单不仅可以添加常见的命令菜单项,还可以添加单选按钮或多选按钮,用法和 Checkbutton 和 Radiobutton 类似。

  1. from tkinter import *
  2. root = Tk()
  3. def callback():
  4. print("你好~")
  5. # 创建一个顶级菜单
  6. menubar = Menu(root)
  7. # 创建 Checkbutton 关联变量
  8. openVar = IntVar()
  9. saveVar = IntVar()
  10. quitVar = IntVar()
  11. # 创建一个下拉菜单“文件”,然后将它添加到顶级菜单中
  12. filemenu = Menu(menubar, tearoff=True)
  13. filemenu.add_checkbutton(label="打开", command=callback, variable=openVar)
  14. filemenu.add_checkbutton(label="保存", command=callback, variable=saveVar)
  15. filemenu.add_separator()
  16. filemenu.add_checkbutton(label="退出", command=root.quit, variable=quitVar)
  17. menubar.add_cascade(label="文件", menu=filemenu)
  18. # 创建 Radiobutton 关联变量
  19. editVar = IntVar()
  20. editVar.set(1)
  21. # 创建另一个下拉菜单“编辑”,然后将它添加到顶级菜单中
  22. editmenu = Menu(menubar, tearoff=False)
  23. editmenu.add_radiobutton(label="剪切", command=callback, variable=editVar, value=1)
  24. editmenu.add_radiobutton(label="拷贝", command=callback, variable=editVar, value=2)
  25. editmenu.add_radiobutton(label="粘贴", command=callback, variable=editVar, value=3)
  26. menubar.add_cascade(label="编辑", menu=editmenu)
  27. # 显示菜单
  28. root.config(menu=menubar)
  29. mainloop()

此处输入图片的描述

Menubutton 组件是一个与 Menu 组件相关联的按钮,它可以放在窗口中的任意位置,并且在被按下时弹出下拉菜单。该组件适用于你希望菜单按钮出现在其他位置的时候。

例 37 创建一个 Menubutton 组件,并创建一个 Menu 组件与之关联。

  1. from tkinter import *
  2. root = Tk()
  3. def callback():
  4. print("你好~")
  5. mb = Menubutton(root, text="点我", relief=RAISED)
  6. mb.pack()
  7. filemenu = Menu(mb, tearoff=False)
  8. filemenu.add_command(label="打开", command=callback)
  9. filemenu.add_command(label="保存", command=callback)
  10. filemenu.add_separator()
  11. filemenu.add_command(label="退出", command=root.quit)
  12. mb.config(menu=filemenu)
  13. mainloop()

此处输入图片的描述

OptionMenu 组件

OptionMenu(选项菜单)事实上是下拉菜单的改版,它的发明弥补了 Listbox 组件无法实现下拉列表框的遗憾。

例 38 创建一个选择菜单,需要一个 Tkinter 变量(用于记录用户选择了什么)以及若干选项即可。

  1. from tkinter import *
  2. root = Tk()
  3. variable = StringVar()
  4. variable.set("one")
  5. w = OptionMenu(root, variable, "one", "two", "three")
  6. w.pack()
  7. mainloop()

此处输入图片的描述

要获得用户选择的内容,使用 Tkinter 变量的 get() 方法即可:

  1. ...
  2. def callback():
  3. print(variable.get())
  4. Button(root, text="点我", command=callback).pack()
  5. ...

此处输入图片的描述

例 39 将很多选项添加到选项菜单中。

  1. from tkinter import *
  2. root = Tk()
  3. OPTIONS=[
  4. "California",
  5. "458",
  6. "FF",
  7. "ENZO",
  8. "LaFerrari"
  9. ]
  10. variable = StringVar()
  11. variable.set(OPTIONS[0])
  12. w = OptionMenu(root, variable, *OPTIONS)
  13. w.pack()
  14. mainloop()

此处输入图片的描述

摘自《零基础入门学习Python》

参考链接:

An Introduction To Tkinter
Tkinter汇总
Python GUI编程(Tkinter)
Tkinter颜色方案举例
python tkinter可以使用的颜色
tkinter学习-菜单与画布
程序设计思想与方法--第五章
用Python中的tkinter模块作图

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注