让python响应特定的按键

时间:2015-10-23 21:24:54

标签: python keyboard

我正在尝试创建一个逐行从文本文件中读取文本的程序。对于前3行,用户只需按Enter键即可前进到下一行。但是,对于第四行,他们需要按一个特定的键(在这种情况下为字母“u”)。我尝试使用getch()执行此操作,但出于某种原因,按“u”键不会生成任何响应。这是代码:

from os import path
from msvcrt import getch
trial = 1
while trial < 5:
    p = path.join("C:/Users/Work/Desktop/Scripts/Cogex/item",  '%d.txt') % trial
    c_item = open(p) 
    print (c_item.readline())
    input()
    print (c_item.readline())
    input()
    print (c_item.readline())
    input()
    print (c_item.readline())
    if ord(getch()) == 85:
        print (c_item.readline())
        input()
trial += 1

我也读过有关使用pygame或Tkinter的人,但我不知道是否可以在没有程序使用图形界面的情况下使用它们。提前谢谢!

2 个答案:

答案 0 :(得分:0)

这个问题是大多数现代ttys的输入都是缓冲的 - 它只在按下回车键时发送到应用程序。您也可以在C中测试它。如果您创建一个GUI应用程序,直接从操作系统获取其键盘数据,那么您可以这样做。但是,这可能比在按u后要求用户打印回车键更麻烦。 例如:

result = input()
if result == 'u':
    print(c_item.readline())
    input()

答案 1 :(得分:0)

85是首都'U'的序数。对于小写'u',您需要序数117

if ord(getch()) == 117:

您还可以简单地检查字符是否为b'u'

if getch() == b'u':

或者您可以对序数进行不区分大小写的检查:

if ord(getch()) in (85, 117):

或者字符串:

if getch().lower() == b'u'

您还需要将trial += 1移动到循环中:

if getch().lower() == b'u':
    print (c_item.readline())
    input()
trial += 1