【问题标题】:Catching a keyboard hit is not reliable / Python捕捉键盘敲击不可靠/Python
【发布时间】:2019-02-18 00:24:02
【问题描述】:

背景是设计一个程序,它在无限循环中运行,从某个地方读取实时数据。我希望这个程序通过键盘交互来控制(没有“Enter”)。为此,我遇到了以下 sn-p。

import msvcrt

def keypress():
    try:
     if msvcrt.kbhit(): #Keyboard hit?
        key = msvcrt.getch().decode("utf-8").lower()    
        return key
    except UnicodeDecodeError:
     pass

while not False:
    print('rainy rainy rain rain')
    if keypress() == "e": #e: exit
        exit()
    if keypress() == "w": # w: wait
        waiting = True
        while waiting == True:
            print("waiting waiting waiting")
            if keypress() == "w":
                waiting = False

我知道仅仅为了等待而调用一个新的无限循环是轻率的,但疯狂的是“e”的命中似乎比“w”的命中更成功。但在每种情况下,一些点击甚至根本没有注册。 -> 有没有办法解决这个问题? Windows 也能够捕捉到每一次键盘敲击!

【问题讨论】:

    标签: python keyboard keypress msvcrt


    【解决方案1】:
    while not False:
     print('rainy rainy rain rain')
     key = keypress()
     if key == "e": #e: exit
        exit()
     if key == "w": # w: wait
        waiting = True
        while waiting == True:
            print("waiting waiting waiting")
            if keypress() == "w":
                waiting = False
    

    ...这个小改动,解决了问题。我认为调用 keypress() [以及 msvcrt.getch() 函数] 需要“很多”时间来阻止另一个键盘击中被识别。但为什么?不应该缓冲按键的命中吗!?因此,经过的时间应该无关紧要!?

    【讨论】:

    • 首先,我会建议你修复你的代码缩进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多