Dan*_*son 7 python keyboard-shortcuts tkinter key-bindings python-3.x
我正在尝试绑定SHIFT+TAB键,但我似乎无法让它工作。我绑定到的Entry小部件是一个小部件。
我试过用 绑定键widget.bind('<Shift_Tab>', func),但我收到一条错误消息:
文件“/usr/lib64/python3.8/tkinter/初始化的.py”,行1337,在_bind self.tk.call(什么+(序列,CMD))_tkinter.TclError:不良事件类型或键符“Shift_Tab”
我仍然在检测SHIFT+ 时遇到问题TAB。这是我的测试代码。我的操作系统是 Linux。的tab重点工作,只是没有SHIFT+ TAB。似乎要解决一个简单的问题,所以我一定是错的?
我试图在Treeview我在一行上覆盖小部件以模拟内联编辑的列之间切换。一行中只能有一个活动小部件。我会跟踪我所在的列以及当用户按下SHIFT+TAB或 时TAB,我会删除当前的小部件并在相应的列中显示一个新的小部件。
这是完整项目的链接:
该项目在一个文件中,没有导入。
下面的代码是我的尝试,它不起作用。
import tkinter as tk
import tkinter.ttk as ttk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.rowconfigure(0, weight=1)
self.columnconfigure(0, weight=1)
self.title('Default Demo')
self.geometry('420x200')
wdg = ttk.Entry(self)
wdg.grid()
def tab(_):
print('Tab pressed.')
def shift_tab(_):
print('Shift tab pressed.')
wdg.bind('<Tab>', tab)
wdg.bind('<Control-ISO_Left_Tab>', shift_tab)
def main():
app = App()
app.mainloop()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
下面的代码(在 python 2.7.6 中)应该可以清楚地说明:我希望这个参考对你有用
from Tkinter import *
def key(event=None):
print 'You pressed Ctrl+Shift+Tab'
root = Tk()
frame = Frame(root, width=100, height=100)
frame.focus_set()
frame.bind('<Control-Shift-KeyPress-Tab>', key)
frame.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
编辑:以上内容适用于 Windows 和 Mac。对于 Linux,请使用
'<Control-ISO_Left_Tab>'.
Run Code Online (Sandbox Code Playgroud)
不是直接答案,而且评论太长。
您可以用一个简单的技巧自己解决您的问题,绑定<Key>到一个函数,然后打印传递给该函数的按键事件参数bind,您可以在其中看到哪个键被按下或没有按下。尝试多种按键组合,看看什么是state,什么是它们的keysym或keycode。
import tkinter as tk
def key_press(evt):
print(evt)
root = tk.Tk()
root.bind("<Key>", key_press)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
SHIFT在 macOS 上按+组合键将输出以下内容TAB。
<KeyPress event state=Shift keysym=Tab keycode=3145753 char='\x19' x=-5 y=-50>
Run Code Online (Sandbox Code Playgroud)
在哪里,
state=Shift表示关键事件的状态为 on SHIFT。
keysym=Tab表示 Tab 键被按下。如果我们只按SHIFT,则将keysym是 Shift_L 或 Shift_R (在 mac 上显示两个 Shift 键的 Shift_L )。
keycode是每个键的唯一代码,即使对于不同的组合键也是如此,例如Left Shift的键码是 ,is131330的键码,但是当按下+时,代码与其中任何一个都不相同,它是。(我不确定这些代码是否适用于每个操作系统,但可以通过将它们打印到控制台来弄清楚)TAB3145737SHIFTTAB3145753
另请参阅所有事件属性。
虽然绑定'<Shift-Tab>'组合键在 Mac 上运行良好,但也可以像这样使用......
def key_press(evt):
if evt.keycode==3145753:
print('Shift+Tab is pressed')
Run Code Online (Sandbox Code Playgroud)