Python 键盘库在 Windows 上返回大写和小写,但在 Linux 上仅返回小写

问题描述 投票:0回答:1

我使用 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)
python linux keyboard debian keyboard-events
1个回答
0
投票

好吧,我仍然不明白你想做什么(使键大写或小写),所以这里是两者的示例。

始终小写:

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 循环,因此键盘输入不会回显(仅在一次击键后检测到多次),因此您必须在循环的下一次迭代开始之前释放按键。

© www.soinside.com 2019 - 2024. All rights reserved.