【问题标题】:Python - Detect keypressPython - 检测按键
【发布时间】:2013-08-17 22:16:10
【问题描述】:

我有一个应用程序,我希望每当用户按 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

但它只是阻塞在那里,如果我有更多代码,它不会运行它,只有当 while 被破坏时。我也不能使用 tkinter!

有没有什么东西只有在按键被按下时才会运行?没有循环。

【问题讨论】:

  • stackoverflow.com/questions/1258566/… 可能会帮助您输入。
  • “我是超级用户,因为我不需要注册和其他东西,但我们开始吧..” - 仅供参考,这是不可接受的。为什么您认为可以在错误的网站上发帖,这样您就不必在另一个网站上注册?!

标签: keyboard python


【解决方案1】:

其中一种方法是创建一个新线程来运行密钥检测器。这是一个例子:

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 模块,创建新线程将使该模块无法正常工作。只是一个提示。 :)

我希望这会有所帮助!

【讨论】:

    【解决方案2】:

    听起来您正在寻找的是基于输入的 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2014-10-07
      • 2012-10-11
      • 2016-08-01
      相关资源
      最近更新 更多