如何防止Python中的read_event和input检测按键

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

我创建了此函数来接受用户输入,但仅在用户开始键入后才进行,同时确保输入提示始终位于第一个。

代码:

def handle_input(conn):
    try:
        while running:
            # Wait for keypress
            trigger = keyboard.read_event()
            if trigger.event_type == keyboard.KEY_DOWN and len(str(trigger.name)) == 1:
                # Display prompt with initial letter
                sys.stdout.write(f"\r<User> {trigger.name}")
                sys.stdout.flush()
                with output_lock:
                    # Take and process user input
                    user_input = input().strip()
                    process_message(conn, f"{trigger.name}{user_input}")
    except UnicodeDecodeError:
        pass

但是我遇到了一个随机发生的问题。在某些情况下,第一次按键将由

keyboard.read_event()
input()
记录。我知道如果发生重复,可以退格,但是是否可以添加更重要的修复来防止这种行为?

python input keyboard-events
1个回答
0
投票

keyboard.read_event()
input()
都捕获相同的按键,导致第一个键被重复。发生这种情况是因为
keyboard.read_event()
不会阻止按键传播到输入缓冲区,然后
input()
会读取输入缓冲区。

要解决此问题,您可以在使用

keyboard.block_key(trigger.name)
检测到第一次按键后暂时抑制键盘输入,然后在需要时取消阻止。

希望这对您有帮助

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