Tkinter Menu Ctrl+快捷键
在设计菜单列表时也可以在指令右边设计Ctrl+X之类的快捷键,X是代表一个快捷键的英文字母,要设计这类操作可以借助accelerator参数,然后再使用bind( )方法将此快捷键绑定一个callback( )方法。为了使程序简化,可以借助Ctrl+快捷键的方法。
示例1
设计File菜单的New File子菜单,可以按Ctrl+N组合键。
from tkinter import *
from tkinter import messagebox
def newFile():
messagebox.showinfo("New File","New File")
def controlN(event):
messagebox.showinfo("New File","New File-CONTROL+N")
root = Tk()
root.title("apidemos.com")
root.geometry("300x180")
menubar = Menu(root) # 建立最上层菜单
# 建立菜单类别对象,并将此菜单类别命名为File
filemenu = Menu(menubar)
menubar.add_cascade(label="File",menu=filemenu,underline=0)
# 在File菜单内建立菜单列表
filemenu.add_command(label="New File",
command=newFile,accelerator="Ctrl+N")
# 经过试验发现 #,accelerator="Ctrl+N") 上一行代码的这部分可以直接删去,而不造成可见的影响
filemenu.add_separator()
filemenu.add_command(label="Exit",command=root.destroy,underline=0)
root.config(menu=menubar) # 显示菜单对象
root.bind("<Control-N>",lambda event:messagebox.showinfo("New File","New File-lambda"))
# root.bind("<Control-N>",controlN)
# 注意: <Control-N>对快捷键的大小写敏感 按键的时候要使用大写的N
root.mainloop()
在主界面,直接输入CTRL+N
,输出:
在上述第18、19行是执行Ctrl+N快捷键的绑定,由于所绑定事件会回传event事件给callback( )方法,所以无法直接调用第3、4行的newFile( )方法,因为newFile( )方法没有传递任何参数,碰上这种问题如果凭直觉再建立一个专供此快捷键使用的方法,此例中使用Lambda表达式处理,以简化整个程序的设计。