从python中的键盘获取多个输入

Posted

技术标签:

【中文标题】从python中的键盘获取多个输入【英文标题】:getting multiple inputs from a key pad in python 【发布时间】:2017-05-24 19:08:58 【问题描述】:

我有一个树莓派,我需要使用 python 从 3x4 键盘获取 2 位数字。键盘工作正常,因为我可以得到一个数字,但我无法得到 2。

获取单数的代码为:

kp=keypad()
digit = None
while digit == None:
      digit = kp.getKey()

print digit

我目前的尝试:

kp=keypad()

digit = None
fin = ""
extra = ""
geb = ""
while digit == None:
      digit = kp.getKey()
      fin = digit
      extra = digit
      while fin == extra:
            digit = kp.getKey()
            geb = str(fin) + str(digit)
print geb

我需要能够获得 2 位数字,例如 12 或 56,但现在只能获得 1 位数字。

【问题讨论】:

假设您的kp.getKey() 返回一个字符串,您始终可以将您的数字初始化为digit = "",然后使用while len(digit) < 2 for 循环并在其中使用digit += kp.getKey() 来收集数字。 你有keypad.getKey的文档链接吗? crumpspot.blogspot.ca/2013/05/… 这是我使用的代码。 【参考方案1】:

查看您的原始代码,kp.getKey() 似乎偶尔会返回None。编写循环以追加到列表,直到它具有使用相同逻辑的两个元素:

lst = []
kp = keypad()
while len(list) < 2:
    digit = kp.getKey()
    if digit is not None:
        lst.append(digit)

print ''.join(lst)

【讨论】:

这会将第一个数字附加两次。如果我按 1 我得到 11 并且没有第二个按钮按下。 @drako234。如果您必须自己过滤输入,那部分是有意义的,但是根据您链接到的代码 cmets,每次按键后通道都会重置。也许您需要在两次按下之间等待? 如果您指的是 time.sleep() 不起作用。还有其他方法可以让它等待吗?似乎getKey()在按下按钮后并没有自行清除,我觉得我需要在返回后将rowVal和colVal重置为-1,但我认为我不能这样做? ok 经过另一次测试,我发现当按下按钮时,getKey() 值将保持不变,直到按下另一个键并且程序不断读取它。 5 秒钟的睡眠没有任何作用。 是的,在这种情况下睡眠无济于事。我对硬件端的了解并不多,所以我认为更好的方法可能是与博客的作者联系并询问他们的看法。他们看起来好像知道自己在做什么。【参考方案2】:

好吧,我想通了:

kp = keypad()
list = ['']
digit = None
while True:
      digit = kp.getKey()
      if digit != None and digit != '*':
              list.append(str(digit))
              time.sleep(.5) #otherwise you end up repeating the same number until a new one is pressed 
              digit = None
     elif digit = '*':
              print ''.join(list)
              break

这将等到您按下 1 个或多个键,如果该键是 * 则它会打印您的号码并结束循环。

希望这可以帮助其他人解决这个问题。

【讨论】:

以上是关于从python中的键盘获取多个输入的主要内容,如果未能解决你的问题,请参考以下文章

10 python从键盘获取输入刷新缓冲区

如何从 WPF 中的子控件中获取键盘?

python获取外部传入多个参数

java怎么获取控制台输入的数据

python 从键盘输入a、b两个数,按大小顺序输出它们

仅使用键盘从多个文本字段中获取字符串