Python键盘库在Windows返回大小写,但在Linux只返回小写
我使用了一个叫做 keyboard 的Python库来获取键盘输入,结果发现了一些奇怪的问题。在Windows上测试时,按下Shift键可以得到大写字母或小写字母,结果是根据我是否按住Shift键而变化的。但是在Debian Linux上测试时,不管我是否按住Shift键,结果似乎总是小写字母。实际上,这个问题还影响到标点符号、特殊字符和括号。比如按下Shift加5,结果还是显示为5。这是不可避免的吗,还是我漏掉了什么?
我希望这个库在Linux上也能像在Windows上一样提供大写字母和特殊字符,不然我就得自己做一个查找表来转换了。
import keyboard
while True:
event = keyboard.read_event()
if event.event_type == keyboard.KEY_DOWN:
print(dir(event))
print('key pressed', event.name)
1 个回答
1
好的,我还是不太明白你想要做什么(是把键变成大写还是小写),所以这里给你两个例子。
总是小写:
from pynput.keyboard import Listener
def on_press(key):
try:
print(key.char)
except:
print(key)
with Listener(on_press=on_press) as listener:
listener.join()
还有总是大写:
import keyboard
hotkeys = []
nums = {1: '!', 2: '@', 3: '#', 4: '$', 5: '%', 6: '^', 7: '&', 8: '*', 9: '(', 10: ')'}
letters = 'abcdefghijklmnopqrstuvwxyz'
for letter in letters:
hotkeys.append(letter)
for num in range(10):
hotkeys.append(str(num))
while True:
for hotkey in hotkeys:
if keyboard.is_pressed(f'shift+{hotkey}'):
try:
hotkey = int(hotkey)
print(nums[hotkey])
except:
hotkey = hotkey.upper()
print(hotkey)
while True:
if not keyboard.is_pressed(f'shift+{hotkey}'):
break
elif keyboard.is_pressed(hotkey):
print(hotkey)
while True:
if not keyboard.is_pressed(hotkey):
break
小写的代码是通过使用 pynput
实现的,这个库无论如何都能给出小写字母,很多人认为它比 keyboard
更好。
大写的代码稍微复杂一点。我列了一些可能的快捷键,比如 'shift+5' 是 '%',然后我进入一个无限循环,等待按键被按下。首先,我们检查用户是否也按下了 shift 键,如果没有按 shift,那我们就直接打印小写版本的快捷键。这个代码显然没有覆盖所有字符(比如 '|'),但涵盖了大多数常用的字符。你可以根据自己的需要添加更多。
另外要注意,我加了一个循环,这样键盘输入不会重复显示(只按了一次键却检测到多次),所以你必须在下一次循环开始之前释放按键。