键绑定 1-5 不起作用 Tkinter

Edm*_*301 4 python tkinter key-bindings

我正在使用 Python 的 Tkinter 进行一个小项目,并且需要使用数字键盘进行按键绑定。但1、2、3、4、5键没有反应。所有其他键都可以正常工作。例如:

from tkinter import *
window = Tk()
window.title('Key Test')
c = Canvas(window, height=500, width=500)
c.pack()
word = c.create_text(250, 250, text='Spam')
def transformation(event):
    c.itemconfig(word, text='Spamalot')
c.bind_all('<6>', transformation)
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好。但是在绑定中放入“5”而不是“6”会使程序无响应。我尝试过在其他窗口中执行此操作,甚至尝试过使用不同的键盘。
似乎什么都不起作用。谁能解释一下这个问题?

Flo*_*mer 5

我不知道为什么<6>有效,但是按键事件被正式调用<Key-\xe2\x80\xa6>,请参阅keysyms 手册页

\n\n
c.bind_all(\'<Key-5>\', transformation)\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑基于Jason HarperMike - SMT的建议,我查看了 Tk 源代码(在generic/tkBind.c),它确实这样做了:

\n\n
    if ((*field >= \'1\') && (*field <= \'5\') && (field[1] == \'\\0\')) {\n        if (eventFlags == 0) {\n            patPtr->eventType = ButtonPress;\n            eventMask = ButtonPressMask;\n        } else if (eventFlags & KEY) {\n            goto getKeysym;\n        } else if (!(eventFlags & BUTTON)) {\n\xe2\x80\xa6\n        }\n        patPtr->detail.button = (*field - \'0\');\n    } else {\n\n    getKeysym:\n        patPtr->detail.keySym = TkStringToKeysym(field);\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,<1>to<5>确实是特殊的指针设备/鼠标按钮。鬼鬼祟祟的。

\n