发布时间:2018-06-05 16:55:21编辑:Run阅读(3506)
Tkinter 之 Menu ,菜单
代码:
import tkinter as tk root = tk.Tk() def hello(): print('hello menu') menubar = tk.Menu(root) # 创建主菜单,每个菜单对应的回调函数都是hello for i in ['Python', 'Php', 'Java', 'C', 'JavaScript']: menubar.add_command(label=i, command=hello) # 将root的menu属性设置为menubar root['menu'] = menubar root.mainloop()
结果:
添加下拉菜单
代码:
import tkinter as tk root = tk.Tk() def hello(): print('hello menu') menubar = tk.Menu(root) filemenu = tk.Menu(menubar, tearoff=0) # 创建主菜单,每个菜单对应的回调函数都是hello for i in ['Python', 'Php', 'Java', 'C', 'JavaScript']: filemenu.add_command(label=i, command=hello) menubar.add_cascade(label='Language', menu=filemenu) # 将root的menu属性设置为menubar root['menu'] = menubar root.mainloop()
结果:
向菜单中添加 Checkbutton 项
代码:
import tkinter as tk root = tk.Tk() def printitem(): print('Python = ', vPython.get()) print('Php = ', vPhp.get()) print('Java = ', vJava.get()) print('C = ', vC.get()) print('JavaScript = ', vJavaScript.get()) menubar = tk.Menu(root) vPython = tk.StringVar() vPhp = tk.StringVar() vJava = tk.StringVar() vC = tk.StringVar() vJavaScript = tk.StringVar() filemenu = tk.Menu(menubar, tearoff=0) # 创建主菜单,每个菜单对应的回调函数都是hello for k,v in {'Python': vPython, 'Php': vPhp, 'Java': vJava, 'C': vC, 'JavaScript': vJavaScript}.items(): # 绑定变量与回调函数 filemenu.add_checkbutton(label=k, command=printitem, variable=v) # 将 menubar 的 menu 属性指定为 filemenu,即 filemenu 为 menubar 的下拉菜单 menubar.add_cascade(label='Language', menu=filemenu) # 将root的menu属性设置为menubar root['menu'] = menubar root.mainloop()
结果:
向菜单 中添加 Radiobutton 项
代码:
import tkinter as tk root = tk.Tk() menubar = tk.Menu(root) vlang = tk.StringVar() # 每次打印出当前选中的语言 def printitem(): print('vlang = {}'.format(vlang.get())) filemenu = tk.Menu(menubar, tearoff=0) for i in ['python', 'php', 'c', 'java', 'javascript']: # 绑定变量与回调函数,指定的变量vlang 将这几项划为一组 filemenu.add_radiobutton(label=i, command=printitem, variable=vlang) # 将menubar的 menu 属性指定为 filemenu,即 filemenu 为 menubar 的下拉菜单 menubar.add_cascade(label='Language', menu = filemenu) root['menu'] = menubar root.mainloop()
效果:
程序每次打印出当前选中的语言,与 Checkbutton 不同的是,同一个组内只有一个处于选中状态
向菜单中添加分隔符
代码;
import tkinter as tk root = tk.Tk() menubar = tk.Menu(root) vlang = tk.StringVar() def printitem(): print('vlang = {}'.format(vlang.get())) filemenu = tk.Menu(menubar, tearoff=0) for i in ['python', 'php', 'c', 'java', 'javascript']: # 绑定变量与回调函数,指定的变量vlang 将这几项划为一组 filemenu.add_radiobutton(label=i, command=printitem, variable=vlang) # 将各个菜单项使用分隔符隔开 filemenu.add_separator() # 将menubar的 menu 属性指定为 filemenu,即 filemenu 为 menubar 的下拉菜单 menubar.add_cascade(label='Language', menu=filemenu) root['menu'] = menubar root.mainloop()
效果:
将上面例子中的菜单改为右击弹出菜单
方法是通过绑定鼠标右键,每当点击时弹出这个菜单,去掉与 root 的关联
代码:
import tkinter as tk root = tk.Tk() menubar = tk.Menu(root) vlang = tk.StringVar() def printitem(): print('vlang = {}'.format(vlang.get())) filemenu = tk.Menu(menubar, tearoff=0) for i in ['python', 'php', 'c', 'java', 'javascript']: # 绑定变量与回调函数,指定的变量vlang 将这几项划为一组 filemenu.add_radiobutton(label=i, command=printitem, variable=vlang) # 将各个菜单项使用分隔符隔开 filemenu.add_separator() # 将menubar的 menu 属性指定为 filemenu,即 filemenu 为 menubar 的下拉菜单 menubar.add_cascade(label='Language', menu=filemenu) # 此时就不要将 root 的 menu 设置为 menubar 了 # root['menu'] = menubar def popup(event): #显示菜单 menubar.post(event.x_root, event.y_root) # 在这里相应鼠标的右键事件,右击时调用 popup,此时与菜单绑定的是 root,可以设置为 # 其它的控件,在绑定的控件上右击就可以弹出菜单 root.bind('<Button-3>', popup) root.mainloop()
结果:
运行测试一个,可以看到各个菜单 项的功能都是可以使用的,所以弹出菜单与一般的菜单功能是一样的,只是弹出的方式不同而已
以下的代码演示了菜单项的操作方法,包括添加各种菜单项,删除一个或多个菜单项
代码:
import tkinter as tk root = tk.Tk() menubar = tk.Menu(root) def printitem(): print('add_separator') filemenu = tk.Menu(menubar, tearoff=0) for i in range(5): filemenu.add_command(label=str(i), command=printitem) menubar.add_cascade(label='Language', menu=filemenu) # 以下为向菜单中添加项的操作 # 在索引1添加一菜单command项 filemenu.insert_command(1, label='1000', command=printitem) # 在索引2添加一菜单checkbutton项 filemenu.insert_checkbutton(2, label='2000', command=printitem) # 将新添加的菜单项使用分隔符隔开 filemenu.insert_separator(1) filemenu.insert_separator(5) # 以下为删除菜单项的操作 # 删除索引6-9的菜单项 filemenu.delete(6, 9) #删除索引为0的菜单项 filemenu.delete(0) root['menu'] = menubar root.mainloop()
结果:
上一篇: tkinter -- Scrollbar
下一篇: tkinter -- Message
47605
45985
36909
34469
29080
25713
24566
19714
19245
17756
5565°
6155°
5691°
5737°
6705°
5483°
5484°
5988°
5965°
7295°