happyfish 发表于 2022-8-17 13:34

python keyboard.add_hotkey 怎么区分小键盘区的按键

本帖最后由 happyfish 于 2022-8-17 13:36 编辑

import keyboard

def ceshi(keya):
    print(keya)

keyboard.add_hotkey("ctrl + Num 1",ceshi,args=('aaa',))
keyboard.wait("ctrl + esc")

新手练习python
想设置快捷键为ctrl+小键盘区的1,但是现在ctrl+1 也会触发,怎么区分呢
求大神帮忙

不带口罩 发表于 2022-8-17 16:26

本帖最后由 不带口罩 于 2022-8-17 16:27 编辑

发送ascii码。
https://pynput.readthedocs.io/en/latest/keyboard.html#pynput.keyboard.Key

boxer 发表于 2022-8-17 16:42

可以用键盘扫描码区分, 数字1是2, 小键盘的1是79

pzx521521 发表于 2022-8-18 10:44

ascii 码是没有问题的 2, 4 L 说的都对, 但是没有给出解决方案
[主页是这个](https://www.cnpython.com/pypi/keyboard)
[源码在这里](https://github.com/boppreh/keyboard)
看了一下确实没有现成的办法-> 那就修改源码吧
直接修改
`keyboard.add_hotkey`
源码位于:
`\Lib\site-packages\keyboard\__init__.py`

line640:
原本为:
```python
steps = parse_hotkey_combinations(hotkey)
```
修改为:
```python
    if isinstance(hotkey, tuple):
      steps = hotkey
    else:
      steps = parse_hotkey_combinations(hotkey)
```

运行的代码改为:
```python
import keyboard

def ceshi(keya):
    print(keya)


steps = keyboard.parse_hotkey_combinations("left ctrl+1")
print(steps)
# (((2, 29), (29, 79)),)
# 29 指ctrl   2指1   79指小键盘1
steps_new = tuple()])])
# keyboard.add_hotkey(steps,ceshi,args=('test',))
keyboard.add_hotkey(steps_new,ceshi,args=('test',))
```

整体逻辑就是
他本身解析的满足不了这种情况, 自己来解析

pzx521521 发表于 2022-8-18 10:49

重新看了一下有api了:
import keyboard

def ceshi(keya):
    # 79 means Num 1
    if keyboard.is_pressed(79):
      print(keya)

keyboard.add_hotkey("ctrl + Num 1",ceshi,args=('aaa',))
keyboard.wait("ctrl + esc")

happyfish 发表于 2022-8-18 15:17

pzx521521 发表于 2022-8-18 10:49
重新看了一下有api了:
import keyboard



谢谢了,我试一下,万分感谢

happyfish 发表于 2022-8-18 15:25

pzx521521 发表于 2022-8-18 10:49
重新看了一下有api了:
import keyboard



确实可以了,谢谢了,我照着你的思路学习一下这个79是怎么的出来的

happyfish 发表于 2022-8-18 15:36

pzx521521 发表于 2022-8-18 10:49
重新看了一下有api了:
import keyboard



这个应该是做了2次判断了吧,按CTRL+1 跟CTRL+NUM 1都会触发测试,在ceshi函数里再次判断按下按键的ascii码,学习了,谢谢
页: [1]
查看完整版本: python keyboard.add_hotkey 怎么区分小键盘区的按键