@yanglt7
2018-11-16T15:07:59.000000Z
字数 3774
阅读 783
Tkinter
Menu 组件用于实现顶级菜单、下拉菜单和弹出菜单。由于该组件是底层代码实现和优化,所以不建议自行通过按钮和其他组件来实现菜单功能。
例 33 创建一个顶级菜单,需要先创建一个菜单实例,然后使用 add() 方法将命令和其他子菜单添加进去。
from tkinter import *root = Tk()def callback():print("你好~")# 创建一个顶级菜单menubar = Menu(root)menubar.add_command(label="hello", command=callback)menubar.add_command(label="quit", command=root.quit)# 显示菜单root.config(menu=menubar)mainloop()

例 34 创建一个下拉菜单(或者其他子菜单),方法也是大同小异,最主要的区别是它们最后需要添加到主菜单上(而不是窗口上)。
from tkinter import *root = Tk()def callback():print("你好~")# 创建一个顶级菜单menubar = Menu(root)# 创建一个下拉菜单“文件”,然后将它添加到顶级菜单中filemenu = Menu(menubar, tearoff=False)filemenu.add_command(label="打开", command=callback)filemenu.add_command(label="保存", command=callback)filemenu.add_separator()filemenu.add_command(label="退出", command=root.quit)menubar.add_cascade(label="文件", menu=filemenu)# 创建另一个下拉菜单“编辑”,然后将它添加到顶级菜单中editmenu = Menu(menubar, tearoff=False)editmenu.add_command(label="剪切", command=callback)editmenu.add_command(label="拷贝", command=callback)editmenu.add_command(label="粘贴", command=callback)menubar.add_cascade(label="编辑", menu=editmenu)# 显示菜单root.config(menu=menubar)mainloop()

将 tearoff 改为 True 之后,“文件”菜单增加了一行小横杠。
filemenu = Menu(menubar, tearoff=True)

例 35 创建一个弹出菜单方法也是一致的,不过需要使用 post() 方法明确地将其显示出来。
from tkinter import *root = Tk()def callback():print("你好~")# 创建一个弹出菜单menubar = Menu(root)menubar.add_command(label="撤销", command=callback)menubar.add_command(label="重做", command=root.quit)frame = Frame(root, width=512, height=512)frame.pack()def popup(event):menubar.post(event.x_root, event.y_root)# 绑定鼠标右键frame.bind("<Button-3>", popup)mainloop()

例 36 这个菜单不仅可以添加常见的命令菜单项,还可以添加单选按钮或多选按钮,用法和 Checkbutton 和 Radiobutton 类似。
from tkinter import *root = Tk()def callback():print("你好~")# 创建一个顶级菜单menubar = Menu(root)# 创建 Checkbutton 关联变量openVar = IntVar()saveVar = IntVar()quitVar = IntVar()# 创建一个下拉菜单“文件”,然后将它添加到顶级菜单中filemenu = Menu(menubar, tearoff=True)filemenu.add_checkbutton(label="打开", command=callback, variable=openVar)filemenu.add_checkbutton(label="保存", command=callback, variable=saveVar)filemenu.add_separator()filemenu.add_checkbutton(label="退出", command=root.quit, variable=quitVar)menubar.add_cascade(label="文件", menu=filemenu)# 创建 Radiobutton 关联变量editVar = IntVar()editVar.set(1)# 创建另一个下拉菜单“编辑”,然后将它添加到顶级菜单中editmenu = Menu(menubar, tearoff=False)editmenu.add_radiobutton(label="剪切", command=callback, variable=editVar, value=1)editmenu.add_radiobutton(label="拷贝", command=callback, variable=editVar, value=2)editmenu.add_radiobutton(label="粘贴", command=callback, variable=editVar, value=3)menubar.add_cascade(label="编辑", menu=editmenu)# 显示菜单root.config(menu=menubar)mainloop()

Menubutton 组件是一个与 Menu 组件相关联的按钮,它可以放在窗口中的任意位置,并且在被按下时弹出下拉菜单。该组件适用于你希望菜单按钮出现在其他位置的时候。
例 37 创建一个 Menubutton 组件,并创建一个 Menu 组件与之关联。
from tkinter import *root = Tk()def callback():print("你好~")mb = Menubutton(root, text="点我", relief=RAISED)mb.pack()filemenu = Menu(mb, tearoff=False)filemenu.add_command(label="打开", command=callback)filemenu.add_command(label="保存", command=callback)filemenu.add_separator()filemenu.add_command(label="退出", command=root.quit)mb.config(menu=filemenu)mainloop()

OptionMenu(选项菜单)事实上是下拉菜单的改版,它的发明弥补了 Listbox 组件无法实现下拉列表框的遗憾。
例 38 创建一个选择菜单,需要一个 Tkinter 变量(用于记录用户选择了什么)以及若干选项即可。
from tkinter import *root = Tk()variable = StringVar()variable.set("one")w = OptionMenu(root, variable, "one", "two", "three")w.pack()mainloop()

要获得用户选择的内容,使用 Tkinter 变量的 get() 方法即可:
...def callback():print(variable.get())Button(root, text="点我", command=callback).pack()...

例 39 将很多选项添加到选项菜单中。
from tkinter import *root = Tk()OPTIONS=["California","458","FF","ENZO","LaFerrari"]variable = StringVar()variable.set(OPTIONS[0])w = OptionMenu(root, variable, *OPTIONS)w.pack()mainloop()

摘自《零基础入门学习Python》
参考链接:
An Introduction To Tkinter
Tkinter汇总
Python GUI编程(Tkinter)
Tkinter颜色方案举例
python tkinter可以使用的颜色
tkinter学习-菜单与画布
程序设计思想与方法--第五章
用Python中的tkinter模块作图