我有一个应用程序,我希望每当用户按下RETURN / ENTER时,它会转到带输入的def。
我正在使用此代码:
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
但它只是阻塞那里,如果我有更多的代码,它将不会运行它,只有当时间被打破。我也不能使用tkinter!
是否只有在按下按键时才会运行?没有循环。
答案 0 :(得分:4)
您可以采用的方法之一是创建一个新线程来运行密钥检测器。这是一个例子:
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模块,则创建新线程将使该模块无法正常工作。只是一个单挑。 :)
我希望这有帮助!
答案 1 :(得分:0)
听起来你正在寻找的是一个基于输入的while循环。如果将所需状态列表放入数组中,则每次都可以检查输入,看它是否是您要捕获的输入之一。
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()