Python 3中使用tkinter的键盘快捷键

7xzttuei  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(154)

我在Python 3中创建了一个菜单栏,我想知道如何向它添加键盘快捷键和加速键。比如按F键打开文件菜单什么的
通过一些挖掘,我发现了“underline=”属性,但它似乎在Python 3中不起作用。当我尝试它时,它不起作用,我找到的唯一文档是早期版本的Python。

menubar = Menu(master)

    filemenu = Menu(menubar, tearoff=0)
    .....
    menubar.add_cascade(label="File", underline=0, menu=filemenu)

有没有办法在Python 3中使用tkinter来做这些事情?

m528fe3b

m528fe3b1#

考虑阅读(http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm
你必须将你的小部件绑定到一个事件到你的函数:
键盘事件被发送到当前拥有键盘焦点的小部件。您可以使用focus_set方法将焦点移动到小部件:
捕获键盘事件

from Tkinter import *

root = Tk()

def key(event):
    print "pressed", repr(event.char)

def callback(event):
    frame.focus_set()
    print "clicked at", event.x, event.y

frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()

如果您运行这个脚本,您会发现您必须在框架中单击,然后它才会开始接收任何键盘事件。
不久前,我按照这个指南实现了一个与我的一个函数绑定的cnc +f:

toolmenu.add_command(label="Search Ctrl+f", command=self.cntrlf)
root.bind('<Control-f>', self.searchbox)
def cntrlf(self, event):
    self.searchbox()

对于你的文件菜单,你可能需要考虑实现加速器:

menubar.add_cascade(label="File", menu=fileMenu)
fileMenu.add_command(label="Exit", command=quit, accelerator="Ctrl+Q")
config(menu=menubar)

对于菜单选项,请记住使用ALT后跟OptionName的第一个字母
文件菜单= ALT后跟f工具菜单= ALT后跟t等等
希望这能提供有用的

chy5wohz

chy5wohz2#

有没有一种方法可以让框架在不点击框架的情况下接收事件?如果我滚动到框架上点击它,我已经花了时间去那里,还不如直接点击按钮,而不是使用快捷键。
答案是将整个root/master/window绑定到一个keybinding,这样每当你按下那个键时,就会调用一个函数来完成你的任务。

import sys
from tkinter import *
from tkinter import filedialog

root = Tk()
menu_bar = Menu(root)
m1 = Menu(menu_bar, tearoff=0)
m1.add_command(label="Open...", underline=0, accelerator="Ctrl+O", command=filedialog.askopenfilename)
m1.add_command(label="Exit", underline=1, accelerator="Ctrl+Q", command=sys.exit)
menu_bar.add_cascade(label="File", underline=0, menu=m1)
menu_bar.add_cascade(label="Help", underline=0, menu=m1)
root.config(menu=menu_bar)

root.bind("<Control-o>", filedialog.askopenfilename)
root.bind("<Control-q>", sys.exit)
root.mainloop()

按Alt显示下划线。Alt+H,X打开帮助菜单并激活退出项。

相关问题