Python单键检测可与添加长输入一起使用

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

上个星期我一直面对这个问题,我认为这是微不足道的,但是在尝试了许多不同的方法之后,我不知道还能尝试什么。

我有一个需要进行按键检测(用键盘移动机器人手臂)的应用程序,但是当我按Enter键时,我需要添加一些输入,只要我想输入就可以,只是一些常规输入(“在此处插入”)

我知道要进行密钥检测的python库,我可以使pynput成功工作,但是当我多次启动和停止线程时,它使我的raspberry pi崩溃了,我尝试了Keyboard库,但整个root需求都令人失望,我也得到了很多建议,这似乎很可靠,并且(几乎)没有引起任何问题,因此检测到1个键不是问题。

我当然知道如何通过执行input()来命名文件并获取所需的所有信息,因此,如果我不得不使用这些选项之一,那么工作将非常简单,那么当我尝试申请时就会遇到挑战两种方法都结合在一起,基本上检测到按键可以完成我需要做的所有事情,并在按下Enter键后立即使用python Input从用户获取所有输入,所有用于检测按键的库似乎都拥有完全控制权,而他们不想要无需战斗即可释放它。他们似乎希望用户始终需要单键检测,但是在我的情况下,我需要不断地打开和关闭它,我无法找出任何有效(或不可行)的方法来使其正常工作。

我的问题是:

什么时候最好以非阻塞方式(例如我的代码在侦听键时需要做其他事情)用诅咒(或其他替代方法)进行键检测和用户的全输入?整个事情是唯一的选择吗?

这是我为简单起见而创建的当前测试代码(可以工作,但在侦听键时会阻止所有内容:]]

import curses
import time
import os

stdscr = None
addInput = False

def SetupCurses():
    global stdscr
    stdscr = curses.initscr()
    curses.cbreak()
    stdscr.keypad(1)

def StartCurse():
    global addInput

    key = ''
    while key != ord('q'):
        key = stdscr.getch()
        stdscr.addstr(str(key)) 
        if key == ord('a'):
            print("\nyou pressed a\n")
        if key == 10:
            print("\nyou pressed enter!\n")
            addInput = True
            break

def EndCurse():
    curses.endwin()

while(True):
    SetupCurses()
    StartCurse()
    EndCurse()

    if addInput:
        theinput = input("add your input\n")
        print(theinput)
        time.sleep(4)
        addInput = False

    #if there isn't any input to add I want the code to continue because there is non-related keys stuff to do, but of course it stopped at "StartCurse"
    #if there is something to add the code can stop at addInput

循环的原因是因为用户可以保存任意数量的职位,所以在添加一些输入之后,就有可能添加更多职位。

[我看到人们在几秒钟后关闭curses循环(无论如何都会停止一切……)使这种情况变得不那么混乱,有点靠运气了……类似:

def ExecuteCurses():
    global AddInput
    #open it and close it very quickly to grab a key if it is pressed
    c = stdscr.getch()
    if c == ord('a'):
        print("you pressed a")
        AddInput = True
        time.sleep(1)
    curses.endwin()

我上个星期一直面对这个问题,我认为这是微不足道的,但是在尝试了许多不同的方法之后,我不知道还能尝试什么。我有一个需要在其中使用的应用程序...

python input keyboard curses
1个回答
0
投票

如果您想要完整而长时间的用户输入,则需要使用curses.echo(),然后使用stdscr.getstr()。那将等待用户按下enter()。为了不使程序在获取输入时阻塞程序,您需要threading,您必须在程序顶部将其导入

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