控件之Menu toolbar statusbar Optionmenu Menubutton

Tkinter 为菜单提供了 Menu 类,该类既可代表菜单条,也可代表菜单,还可代表上下文菜单(右键菜单)。
简单来说,Menu 类就可以搞定所有菜单相关内容。

程序可调用 Menu 的构造方法来创建菜单,在创建菜单之后可通过如下方法添加菜单项:
add_command():添加菜单项。
add_checkbutton():添加复选框菜单项。
add_radiobutton():添加单选钮菜单项。
add_separator():添加菜单分隔条。

上面的前三个方法都用于添加菜单项,因此都支持如下常用选项:
label:指定菜单项的文本。
command:指定为菜单项绑定的事件处理方法。
image:指定菜单项的图标。
compound:指定在菜单项中图标位于文字的哪个方位。

有了菜单之后,接下来就是如何使用菜单了。菜单有两种用法:
在窗口上方通过菜单条管理菜单。
通过鼠标右键触发右键菜单(上下文菜单)。

 

from tkinter import *
from tkinter import messagebox
root = Tk()
root.title('Menu OptionMenu Menubutton')
root.geometry('300x200')

#菜单:
menubar = Menu(root)# 创建菜单条
root['menu'] = menubar# 添加菜单条\显示

filemenu = Menu(menubar, tearoff=0)# 创建菜单
menubar.add_cascade(label='文件', menu=filemenu)# 添加菜单

languagemenu = Menu(menubar, tearoff=1)
menubar.add_cascade(label='选择语言', menu=languagemenu)

#filenew_icon = PhotoImage(file='C:\\Users\\caojiangtao\\Desktop\\Tkinter\\5.Picture/filenew.png')
#fileopen_icon = PhotoImage(file='C:\\Users\\caojiangtao\\Desktop\\Tkinter\\5.Picture/fileopen.png')


filemenu.add_command(label="新建", command=None,# 添加菜单项
                     #image=filenew_icon,
                     compound=LEFT)
filemenu.add_command(label="打开", command=None,
                     #image=fileopen_icon,
                     compound=LEFT)

filemenu.add_separator()# 添加分隔条

submenu = Menu(filemenu, tearoff=0)#创建子菜单
filemenu.add_cascade(label='选择性别', menu=submenu)# 添加子菜单

def choosegender():
        messagebox.showinfo(message=('选择的性别为: %s' % genderVar.get()))

                                            # 添加子菜单项Radiobutton
genderVar = IntVar()
# enumerate()将一个可遍历的数据对象(列表、元组或字符串)组合为一个索引序列,同时列出数据下标和数据.
for num,  Im in enumerate(['男', '女', '保密']):
    submenu.add_radiobutton(label=Im,variable=genderVar, value=num, command=choosegender)
    print(num)

def chooselanguage():
    rt_list = [e.get() for e in languageVars]
    messagebox.showinfo(message=('选择的语言为: %s' % ','.join(rt_list)))

languageVars = [StringVar(), StringVar(), StringVar(), StringVar()]
#可参考checkbutton章节                                     # 添加菜单项checkbutton
for num, L in enumerate(('English', 'Chinese', 'French', 'Japanese')):
    languagemenu.add_checkbutton(label=L,variable=languageVars[num] ,onvalue=num,command=chooselanguage)
'''

languageVars=[]                                            # 添加菜单项checkbutton
for num, L in enumerate(('English', 'Chinese', 'French', 'Japanese')):
    strVar = StringVar()
    languagemenu.add_checkbutton(label=L,variable=strVar ,onvalue=num,command=chooselanguage)
    languageVars.append(strVar)
'''
#工具栏:
def showdialog():
    pass

toolbar= Frame(root, bg='#F7EED6',relief=RAISED)
toolbar.pack(fill=X)
frame = Frame(toolbar)
frame.pack(side=LEFT)

bm = PhotoImage(file='C:/Users/caojiangtao/Desktop/3.compound.png')
Button(frame, width=20,height=10, image=bm, command=showdialog).grid(row=0, column=0, padx=1, pady=1, sticky=E)
Button(frame, width=20,height=10, image=bm, command=showdialog).grid(row=0, column=1, padx=1, pady=1, sticky=E)

#OptionMenu:
def output(event):
    print(event.widget)
    print(strVar.get())

strVar= StringVar()
strVar.set('OptionMenu')
om = OptionMenu(root,strVar,'打开','关闭','打印')
om.pack()
om.bind('<Button-1>', output)

#MenuButton:
def callback():
    print("你好")

mb = Menubutton(root,text='MenuButton')#创建按钮
mb.pack()#显示
#在menubutton下 创建Menu
mu = Menu(mb,tearoff=False)
#添加菜单到按钮下显示
mb['menu'] = mu#或者mb.config(menu = mu)
#添加选项
mu.add_command(label='打开', command=callback)
mu.add_command(label='退出', command=root.quit)
mu.add_command()  # 添加分割线
mu.add_radiobutton(label ='男')
mu.add_radiobutton(label ='女')

#状态栏:
statusbar = Label(root, text='', bd=1, relief=SUNKEN, anchor=E)
statusbar.pack(side=BOTTOM, fill=X)

def xyvalue(event):
    statusbar['text'] = "鼠标位置(%s %s)" % (event.x, event.y)
root.bind('<Motion>',xyvalue)

root.mainloop()

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值