Python Tkinter:在发布菜单时条目是否接收密钥?
Python Tkinter: Have Entry receive keys while Menu is posted?
我想要一个带有下拉菜单自动完成功能的条目...有点像 Chrome 的多功能栏,例如。
我遇到的一个问题是,一旦发布(显示)菜单,它似乎会拦截所有按键事件,而且我看不到将它们重定向到其他任何地方的方法。
下面是一些重现该问题的简化代码:
from Tkinter import Entry, Menu, Tk
def menuKey(event):
print('Key pressed in a menu.')
def showMenu(event):
menu = Menu(root, tearoff = 0)
menu.add_command(label = 'Just for example')
menu.bind('<KeyRelease>', menuKey)
menu.post(entry.winfo_rootx(), entry.winfo_rooty() + entry.winfo_height())
root = Tk()
entry = Entry(root, width = 50)
entry.bind('<KeyRelease>', showMenu)
entry.bind('<FocusIn>', showMenu)
entry.pack()
root.mainloop()
单击条目后会显示菜单。尝试打字。在 Windows 上,您只会听到错误提示音。在 OS X 上,它突出显示菜单中的内容。 OS 都没有做我真正想要的,即 menuKey
函数 运行.
有什么方法可以拦截将要转到 Menu
and/or 的关键事件,迫使它们转到 Entry
?
您是对的:本机菜单窃取了所有事件,您对此无能为力。这是我们为 OSX 和 Windows 上的原生菜单付出的代价。
解决方法是不为下拉菜单使用菜单。相反,您可以创建 Toplevel
的实例,打开 overrideredirect
标志,然后自己管理所有事件。这有点麻烦,但它是可行的。
我想要一个带有下拉菜单自动完成功能的条目...有点像 Chrome 的多功能栏,例如。
我遇到的一个问题是,一旦发布(显示)菜单,它似乎会拦截所有按键事件,而且我看不到将它们重定向到其他任何地方的方法。
下面是一些重现该问题的简化代码:
from Tkinter import Entry, Menu, Tk
def menuKey(event):
print('Key pressed in a menu.')
def showMenu(event):
menu = Menu(root, tearoff = 0)
menu.add_command(label = 'Just for example')
menu.bind('<KeyRelease>', menuKey)
menu.post(entry.winfo_rootx(), entry.winfo_rooty() + entry.winfo_height())
root = Tk()
entry = Entry(root, width = 50)
entry.bind('<KeyRelease>', showMenu)
entry.bind('<FocusIn>', showMenu)
entry.pack()
root.mainloop()
单击条目后会显示菜单。尝试打字。在 Windows 上,您只会听到错误提示音。在 OS X 上,它突出显示菜单中的内容。 OS 都没有做我真正想要的,即 menuKey
函数 运行.
有什么方法可以拦截将要转到 Menu
and/or 的关键事件,迫使它们转到 Entry
?
您是对的:本机菜单窃取了所有事件,您对此无能为力。这是我们为 OSX 和 Windows 上的原生菜单付出的代价。
解决方法是不为下拉菜单使用菜单。相反,您可以创建 Toplevel
的实例,打开 overrideredirect
标志,然后自己管理所有事件。这有点麻烦,但它是可行的。