【问题标题】:How do I recognize key on numpad is being clicked?如何识别小键盘上的键被点击?
【发布时间】:2018-09-06 07:35:01
【问题描述】:

我使用bind() 为按键设置操作,但是当我想为数字键盘上的数字键添加操作时,它不起作用。如果我想让它工作,代码应该是什么样子?

【问题讨论】:

标签: python tkinter


【解决方案1】:

这实际上取决于 NumLock 键的状态。

为了识别哪个键被按下,tkinter event 对象具有三个属性:charkeysymkeycode

专注于键盘数字,NumLock ON 这些是(0-9):

char    keysym      keycode
'0'     '0'         96
'1'     '1'         97
'2'     '2'         98
'3'     '3'         99
'4'     '4'         100
'5'     '5'         101
'6'     '6'         102
'7'     '7'         103
'8'     '8'         104
'9'     '9'         105

NumLock 关闭的情况下,这些是 (0-9):

char    keysym      keycode
''      'Insert'    45
''      'End'       35
''      'Down'      40
''      'Next'      34
''      'Left'      37
''      'Clear'     12
''      'Right'     39
''      'Home'      36
''      'Up'        38
''      'Prior'     33

现在,对于数字(所以 NumLock ON),charkeysym 是相同的,但 keycode 对于小键盘数字和字母上方的普通行是不同的.例如,数字行中的2keycode50,而小键盘中的2keycode98

但是,在 NumLock 关闭的情况下,这些键与具有相同含义的其他键无法区分。例如,普通的End和键盘中1下面的都有keycode35

因此,无论 NumLock 的状态如何,要检查数字键盘上的 1 键,您需要检查 keycode 是否为 97 或 @ 987654338@。但是,这确实意味着按常规 End 键将产生相同的效果,我不知道有什么方法可以阻止它。


我使用以下代码检查上面发布的所有值:

import tkinter as tk

root = tk.Tk()

def key(event):
    print(repr(event.char), repr(event.keysym), repr(event.keycode))

root.bind("<Key>", key)
root.mainloop()

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2016-08-11
    • 2016-03-13
    • 1970-01-01
    相关资源
    最近更新 更多