@yanglt7
2018-11-16T15:07:59.000000Z
字数 3774
阅读 683
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模块作图