从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中的键盘获取多个输入的主要内容,如果未能解决你的问题,请参考以下文章