Menu
需先设置 root.option_add('*tearOff', FALSE)
否则顶部菜单会有老式的虚线
创建过程:
1. menubar = Menu(root)
以主窗口为parent,创建menubar
2. root["menu"] = menubar
指定主窗口的menu属性,为刚创建的menubar
3. menu_file = Menu(menubar)
menubar.add_cascade(menu=menu_file, label='File')
创建一级菜单,添加菜单到menubar
4. menu_file.add_command(label='New', command=newFile)
menu_file.add_checkbutton(label='Check', variable=check, onvalue=1, offvalue=0)
menu_file.add_radiobutton(label='One', variable=radio, value=1)
为菜单添加具体的菜单项
还可用menu_file.add_separator() 添加分割线
其他可用属性
- underline 指定下划线。参数为字符的index(base-0)
- image 指定图片
- compound 指定混合方式
- state 指定状态。可用属性 disabled,normal
.entrycget(0, 'label') 查询属性
.entryconfigure('Close', state=DISABLED) 设置属性
需先设置 root.option_add('*tearOff', FALSE)
否则顶部菜单会有老式的虚线
创建过程:
1. menubar = Menu(root)
以主窗口为parent,创建menubar
2. root["menu"] = menubar
指定主窗口的menu属性,为刚创建的menubar
3. menu_file = Menu(menubar)
menubar.add_cascade(menu=menu_file, label='File')
创建一级菜单,添加菜单到menubar
4. menu_file.add_command(label='New', command=newFile)
menu_file.add_checkbutton(label='Check', variable=check, onvalue=1, offvalue=0)
menu_file.add_radiobutton(label='One', variable=radio, value=1)
为菜单添加具体的菜单项
还可用menu_file.add_separator() 添加分割线
其他可用属性
- underline 指定下划线。参数为字符的index(base-0)
- image 指定图片
- compound 指定混合方式
- state 指定状态。可用属性 disabled,normal
.entrycget(0, 'label') 查询属性
.entryconfigure('Close', state=DISABLED) 设置属性
.entryconfigure(0) 查询配置属性
from tkinter import *
'''
root = Tk()
menu = Menu(root)
for i in ('One', 'Two', 'Three'):
menu.add_command(label=i)
if (root.tk.call('tk', 'windowingsystem')=='aqua'):
root.bind('<2>', lambda e: menu.post(e.x_root, e.y_root))
root.bind('<Control-1>', lambda e: menu.post(e.x_root, e.y_root))
else:
root.bind('<3>', lambda e: menu.post(e.x_root, e.y_root))
root.mainloop()
'''
def newFile():
print("new file")
def openFile(*args):
print("open file")
def closeFile(*args):
print("close file")
root = Tk()
root.title("菜单练习")
# 常规配置
root.option_add('*tearOff', FALSE)
# 创建主菜单
menubar = Menu(root)
root["menu"] = menubar
# 创建一级菜单
menu_file = Menu(menubar)
menu_edit = Menu(menubar)
menu_check = Menu(menubar)
menu_radio = Menu(menubar)
sysmenu = Menu(menubar,name="system")
menubar.add_cascade(menu=menu_file,label="File")
menubar.add_cascade(menu=menu_edit,label="Edit")
menubar.add_cascade(menu=menu_check,label="Check")
menubar.add_cascade(menu=menu_radio,label="Radio")
menubar.add_cascade(menu=sysmenu)
# 创建二级菜单
menu_new = Menu(menu_file)
menu_file.add_cascade(menu=menu_new,label="New...")
# 增加菜单项目
image_python = PhotoImage(file="python.gif")
image_java = PhotoImage(file="java.gif")
menu_new.add_command(label="Python File", image=image_python, compound="left", command=newFile)
menu_new.add_command(label="Java File", image=image_java, compound="left", command=newFile)
# 增加分割线
menu_file.add_separator()
menu_file.add_command(label="Open", command=openFile)
menu_file.add_command(label="Close", command=closeFile)
menu_edit.add_command(label="Cut", command=newFile)
menu_edit.add_command(label="Copy", command=openFile)
menu_edit.add_command(label="Paste", command=closeFile, state="disabled")
# check菜单项
check_one = StringVar()
check_two = StringVar()
menu_check.add_checkbutton(label="Check One", variable=check_one, onvalue=1, offvalue=0)
menu_check.add_checkbutton(label="Check Two", variable=check_two, onvalue=1, offvalue=0)
check_one.set(1)
# Radio菜单项
radio = StringVar()
menu_radio.add_radiobutton(label="Item One", variable=radio, value=1)
menu_radio.add_radiobutton(label="Item Two", variable=radio, value=2)
radio.set(2)
# 获取、改变菜单项值
# print("label={!r}".format(menu_file.entrycget(2,"label"))) # 获取菜单第二项的label值
menu_file.entryconfigure("Close", state=DISABLED)
# print("configure={}".format(menu_file.entryconfig(0)))
root.mainloop()