我使用 keyboard python 库将键盘输入输入到我的应用程序中,我发现了一个奇怪的不规则现象。在 Windows 上测试时,打印结果根据我是否按住 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)
好吧,我仍然不明白你想做什么(使键大写或小写),所以这里是两者的示例。
始终小写:
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
更好的 python 库。
大写代码稍微复杂一些。我列出了一些可能的热键,例如“shift+5”是“%”,然后我进入 while True 循环并等待按下某个键。首先我们检查用户是否也按下了shift,如果他们没有按下shift,那么我们只打印小写版本的热键。这段代码显然没有涵盖所有字符(如“|”),但它确实涵盖了最常用的字符。您可以根据自己的喜好添加更多内容。
另请注意,我添加了一个 while 循环,因此键盘输入不会回显(仅在一次击键后检测到多次),因此您必须在循环的下一次迭代开始之前释放按键。