Python - 检测按键

5

我有一个应用程序,希望每当用户按下回车键时,它会进入一个带有输入的函数。

我正在使用以下代码:

while True:
    z = getch()
    # escape key to exit
    if ord(z) == 9:
        self.command()
        break
    if ord(z) == 27:
        print "Encerrando processo.."
        time.sleep(2)
        sys.exit()
        break

但它只是阻塞在那里,如果我有更多的代码它不会运行,只有当while被打破时才会运行。我也不能使用tkinter!是否有什么东西只有在按下键时才运行?而不需要循环。

这个链接 http://stackoverflow.com/questions/1258566/how-to-get-user-input-during-a-while-loop-without-blocking 可以帮助你处理输入。 - cptroot
我在超级用户中因为我不需要注册之类的东西,但是我们来看看...只是提醒一下,这样做是不可接受的。你为什么认为在错误的网站上发布内容就可以避免在另一个网站上注册呢?! - ThiefMaster
2个回答

6

创建一个新线程来运行键探测器是一种可能的方式。以下是示例:

import threading

class KeyEventThread(threading.Thread):
    def run(self):
        # your while-loop here

kethread = KeyEventThread()
kethread.start()

请注意,只有在调用线程的 start() 函数后,while 循环才会运行。此外,它不会自动重复执行函数 - 您必须将代码包装在 while 循环中以使其重复执行。 不要显式调用线程的 run() 函数,因为这将导致代码与所有其他代码一起在线程内运行,而不是在单独的线程中运行。您必须使用 threading.Thread 中定义的 start() 函数,以便它可以创建新线程。
另请注意:如果打算使用 atexit 模块,则创建新线程将使该模块无法正常工作。提前告知您。 :)
希望这有所帮助!

0

听起来,你想要的是基于输入的循环。如果你将一组期望的状态放入数组中,那么每次都可以检查输入是否是你想要捕捉的其中之一。

z = getch()
chars = [9, 27]
while ord(z) not in chars:
  z = getch()

if ord(z) == 9:
  do_something()
if ord(z) == 27:
  do_something_else()

do_more_things()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接