Python基础学习-tkinter(六)

Tkinter 提供了一个组件 Menu 用来实现*菜单,下拉菜单和弹出菜单。

学习目标

  • 创建一个*菜单
  • 实现下拉菜单、级联菜单和实现弹出菜单
  • 选择菜单
  • 星号* 和**作用

创建一个*菜单

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) # 调用config方法对root的menu选项相关联,添加到root窗口中。

mainloop()

输出:
Python基础学习-tkinter(六)

实现下拉菜单、级联菜单和实现弹出菜单

下拉菜单和级联菜单

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) # 创建级联菜单,menu选项指定下一级的菜单是什么

editmenu = Menu(menubar,tearoff=False)
editmenu.add_command(label='剪切',command=callback)
editmenu.add_command(label='拷贝',command=callback)
editmenu.add_separator()
editmenu.add_command(label='粘贴',command=callback)
menubar.add_cascade(label='编辑',menu=editmenu)

root.config(menu=menubar)
mainloop()

输出:
Python基础学习-tkinter(六)
弹出菜单

from tkinter import *

root = Tk()

def callback():
    print("你好!!!")

menubar = Menu(root)
menubar.add_command(label='撤销',command=callback)
menubar.add_command(label='重做',command=callback)

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()

输出:
Python基础学习-tkinter(六)

选择菜单

OptionMenu(选择菜单)组件。其实,Optionmenu 就是下拉菜单的一个改版,但是他的发明弥补了 Listbox(列表框)无法实现下拉列表框的遗憾,因为创建一个选择菜单的效果和创建下拉列表框的效果是一样的。

from tkinter import *
root = Tk()

variable = StringVar()
variable.set("one")

w = OptionMenu(root,variable,'one','two','three').pack()

mainloop()

输出:
Python基础学习-tkinter(六)
有时需要很多的选择添加到选择菜单中,那么就需要将这些选项放在元组和列表中,然后在通过*或者**的方式将有关的参数传入。

from tkinter import *

Numbers = [
    '1',
    '2',
    '3',
    '4',
    '5',
    '6'
]

root = Tk()

variable = StringVar()
variable.set(Numbers[0])

w = OptionMenu(root, variable, *Numbers)  # 不加*整个列表会被作为一个选项
w.pack()

mainloop()

输出:
Python基础学习-tkinter(六)
在传递参数时,一个星号*或者两个星号**分别代表传递的是列表和元组或者字典等