Python 3 中 tkinter 的键盘快捷键

问题描述 投票:0回答:3

我在 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 来做这些事情?

python python-3.x tkinter menu keyboard-shortcuts
3个回答
15
投票

考虑阅读 (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()

如果运行此脚本,您会发现必须单击 在开始接收任何键盘事件之前的帧。

不久前我按照本指南实现了 ctrl+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 后跟选项名称的第一个字母

文件菜单 = ALT 后按 f 工具菜单 = ALT 后接 t 等等

希望这提供有用的


3
投票

有没有一种方法可以让框架在不点击框架的情况下接收事件?如果我滚动到框架并单击它,我已经花了时间到达那里,不妨单击按钮而不是使用快捷键。

答案是将整个根/主/窗口绑定到一个按键绑定,这样每当您按下该键时,就会调用一个函数来执行您的任务。

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+HX 打开“帮助”菜单并激活“退出”项。


0
投票
def printtxt():
    print('hi! how are you')
printtxt()
© www.soinside.com 2019 - 2024. All rights reserved.