Python基础入门学习笔记 073 GUI的终极选择:Tkinter10

发布时间 2023-08-23 14:00:46作者: 一杯清酒邀明月

Munu组件

Tkinter提供了一个Menu组件,用于实现顶级菜单、下拉菜单和弹出菜单。

实例1:创建一个顶级菜单(或称窗口主菜单)

 1 from tkinter import *
 2 
 3 def callback():
 4     print("被调用了")
 5     
 6 root = Tk()
 7 
 8 
 9 menubar = Menu(root)#创建一个顶级菜单
10 menubar.add_command(label="Hello",command=callback)#创建一个顶级菜单对象
11 menubar.add_command(label="Quit",command=root.quit)
12 
13 #显示菜单
14 root.config(menu=menubar)
15 
16 mainloop()

 实例2:创建添加到主菜单上的下拉菜单

 1 from tkinter import *
 2 
 3 def callback():
 4     print("被调用了")
 5     
 6 root = Tk()
 7 
 8 #创建一个顶级菜单
 9 menubar = Menu(root)
10 
11 #创建下拉菜单filemenu包含内容
12 filemenu=Menu(menubar,tearoff=False)#创建一个从属于menubar的子菜单(下拉菜单)filemenu
13 filemenu.add_command(label="打开",command=callback)#创建一个下拉菜单对象
14 filemenu.add_command(label="保存",command=callback)
15 filemenu.add_separator()#插入分隔线
16 filemenu.add_command(label="退出",command=root.quit)
17 #创建一个顶级菜单对象“文件”,filemenu从属于这个对象(或称将filemenu添加到顶级菜单“文件”中)
18 menubar.add_cascade(label="文件",menu=filemenu)
19 
20 #创建另一个下拉菜单editmenu包含内容
21 editmenu=Menu(menubar,tearoff=False)#创建一个从属于menubar的子菜单(下拉菜单)editmenu
22 editmenu.add_command(label="剪切",command=callback)
23 editmenu.add_command(label="拷贝",command=callback)
24 editmenu.add_separator()#插入分隔线
25 editmenu.add_command(label="粘贴",command=callback)
26 #创建一个顶级菜单对象“编辑”,editmenu从属于这个对象(或称将editmenu添加到顶级菜单“编辑”中)
27 menubar.add_cascade(label="编辑",menu=editmenu)
28 
29 #显示菜单
30 root.config(menu=menubar)
31 
32 mainloop()

 实例3:创建一个弹出菜单方法

 1 from tkinter import *
 2 
 3 def callback():
 4     print("被调用了")
 5     
 6 root = Tk()
 7 
 8 def popup(event):
 9     menu.post(event.x_root,event.y_root)#在此时鼠标位置弹出显示窗口
10     
11 #创建一个顶级菜单menu
12 menu = Menu(root,tearoff=False)
13 
14 #创建顶级菜单menu包含内容
15 menu.add_command(label="撤销",command=callback)#创建一个顶级菜单对象
16 menu.add_command(label="重做",command=callback)
17 #创建一个框架
18 frame = Frame(root,width=100,height=100)
19 frame.pack()
20 
21 #将鼠标右键与popup方法绑定
22 frame.bind("<Button-3>",popup)
23 
24 #显示菜单
25 #root.config(menu=menu)
26 
27 mainloop()

 实例4:菜单弹出

 1 from tkinter import *
 2 
 3 def callback():
 4     print("被调用了")
 5     
 6 root = Tk()
 7 
 8 def popup(event):
 9     menu.post(event.x_root,event.y_root)#在此时鼠标位置弹出显示窗口
10     
11 #创建一个顶级菜单menu
12 menu = Menu(root,tearoff=True)
13 
14 #创建顶级菜单menu包含内容
15 menu.add_command(label="撤销",command=callback)#创建一个顶级菜单对象
16 menu.add_command(label="重做",command=callback)
17 #创建一个框架
18 frame = Frame(root,width=500,height=500)
19 frame.pack()
20 
21 #将鼠标右键与popup方法绑定
22 frame.bind("<Button-3>",popup)
23 
24 #显示菜单
25 #root.config(menu=menu)
26 
27 mainloop()

 实例5:添加单选组件radiobutton和多选按钮checkbutton

 1 from tkinter import *
 2 
 3 def callback():
 4     print("被调用了")
 5     
 6 root = Tk()
 7 
 8 #创建一个顶级菜单
 9 menubar = Menu(root)
10 #创建checkbutton关联变量
11 openVar = IntVar()
12 saveVar = IntVar()
13 exitVar = IntVar()
14 #创建下拉菜单filemenu包含内容
15 filemenu=Menu(menubar,tearoff=True)#创建一个从属于menubar的子菜单(下拉菜单)filemenu
16 filemenu.add_checkbutton(label="打开",command=callback,variable=openVar)#创建一个下拉菜单对象
17 filemenu.add_checkbutton(label="保存",command=callback,variable=saveVar)
18 filemenu.add_separator()#插入分隔线
19 filemenu.add_checkbutton(label="退出",command=root.quit,variable=exitVar)
20 #创建一个顶级菜单对象“文件”,filemenu从属于这个对象(或称将filemenu添加到顶级菜单“文件”中)
21 menubar.add_cascade(label="文件",menu=filemenu)
22 
23 #创建radiobutton关联变量
24 editVar = IntVar()
25 editVar.set(1)
26 
27 #创建另一个下拉菜单editmenu包含内容
28 editmenu=Menu(menubar,tearoff=True)#创建一个从属于menubar的子菜单(下拉菜单)editmenu
29 editmenu.add_radiobutton(label="剪切",command=callback,variable=editVar,value=1)
30 editmenu.add_radiobutton(label="拷贝",command=callback,variable=editVar,value=2)
31 editmenu.add_separator()#插入分隔线
32 editmenu.add_radiobutton(label="粘贴",command=callback,variable=editVar,value=3)
33 #创建一个顶级菜单对象“编辑”,editmenu从属于这个对象(或称将editmenu添加到顶级菜单“编辑”中)
34 menubar.add_cascade(label="编辑",menu=editmenu)
35 
36 #显示菜单
37 root.config(menu=menubar)
38 
39 mainloop()

Menubutton组件(希望菜单按钮出现在其它位置时)

Menubutton组件是一个与Menu组件相关联的按钮,它可以放在窗口中的任意位置,并且在被按下时弹出下拉菜单

实例1:

 1 from tkinter import *
 2 
 3 def callback():
 4     print("被调用了")
 5     
 6 root = Tk()
 7 
 8 #创建一个顶级菜单Menubutton按钮,设置为浮起显示(RAISED)
 9 mb = Menubutton(root,text="点我",relief=RAISED)
10 
11 mb.pack(side=RIGHT)#设置为右中显示
12 
13 #创建下拉菜单filemenu包含内容
14 filemenu = Menu(mb,tearoff=False)#创建一个从属于mb的下拉菜单filemenu
15 filemenu.add_checkbutton(label="打开",command=callback,selectcolor="yellow")
16 filemenu.add_command(label="保存",command=callback)#创建一个下拉菜单对象"保存“
17 filemenu.add_separator()
18 filemenu.add_command(label="退出",command=root.quit)
19 #显示菜单
20 mb.config(menu=filemenu)
21 
22 mainloop()

OptionMenu(选项菜单)组件

选项菜单的发明弥补了Listbox组件无法实现下拉列表框的遗憾

实例1:

 1 from tkinter import *
 2 
 3 def callback():
 4     print("被调用了")
 5     
 6 root = Tk()
 7 
 8 variable = StringVar()#创建字符串变量variable
 9 variable.set("one")#初始值设置为"one"
10 w = OptionMenu(root,variable,"one","two","three")
11 w.pack()
12 
13 mainloop()

 实例2:多个选项添加到选项菜单中

 1 from tkinter import *
 2 
 3 def callback():
 4     print("被调用了")
 5     
 6 root = Tk()
 7 
 8 OPTIONS = [
 9     "Hadley",
10     "小土豆",
11     "yiwofeiye",
12     "RAN"
13     ]
14 
15 variable = StringVar()#创建字符串变量variable
16 variable.set(OPTIONS[0])#初始值设置为"one"
17 w = OptionMenu(root,variable,*OPTIONS)
18 w.pack()
19 
20 def callback():
21     print(variable.get())
22 
23 Button(root,text="点我",command=callback).pack()
24 
25 mainloop()