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:27 编辑
发送ascii码。
https://pynput.readthedocs.io/en/latest/keyboard.html#pynput.keyboard.Key
可以用键盘扫描码区分, 数字1是2, 小键盘的1是79 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',))
```
整体逻辑就是
他本身解析的满足不了这种情况, 自己来解析 重新看了一下有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") pzx521521 发表于 2022-8-18 10:49
重新看了一下有api了:
import keyboard
谢谢了,我试一下,万分感谢 pzx521521 发表于 2022-8-18 10:49
重新看了一下有api了:
import keyboard
确实可以了,谢谢了,我照着你的思路学习一下这个79是怎么的出来的 pzx521521 发表于 2022-8-18 10:49
重新看了一下有api了:
import keyboard
这个应该是做了2次判断了吧,按CTRL+1 跟CTRL+NUM 1都会触发测试,在ceshi函数里再次判断按下按键的ascii码,学习了,谢谢
页:
[1]