当前位置: 首页 > 面试题库 >

在python中检测按键?

督弘化
2023-03-14
问题内容

我正在用python开发一个秒表类型的程序,我想知道如何检测是否按下了一个键(例如p表示暂停,s表示停止),而我不希望它像raw_input这样等待用户输入,然后继续执行。有人知道如何在while循环中执行此操作吗?

另外,我想做这个跨平台的,但是如果那不可能,那么我的主要开发目标是linux


问题答案:

对于那些在窗户上努力寻找可行答案的人,我的是:pynput

from pynput.keyboard import Key, Listener

def on_press(key):
    print('{0} pressed'.format(
        key))

def on_release(key):
    print('{0} release'.format(
        key))
    if key == Key.esc:
        # Stop listener
        return False

# Collect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

上面的功能将打印你按下的任何键,并在你释放“ esc”键时开始执行操作。键盘文档在这里用于更多变化的用法。

马库斯·冯·布罗迪(Markus von Broady)强调了一个潜在的问题,即:这个答案并不需要你在当前窗口中激活此脚本,Windows的解决方案是:

from win32gui import GetWindowText, GetForegroundWindow
current_window = (GetWindowText(GetForegroundWindow()))
desired_window_name = "Stopwatch" #Whatever the name of your window should be

#Infinite loops are dangerous.
while True: #Don't rely on this line of code too much and make sure to adapt this to your project.
    if current_window == desired_window_name:

        with Listener(
            on_press=on_press,
            on_release=on_release) as listener:
            listener.join()


 类似资料:
  • 问题内容: 我正在尝试使用win32api通过特定的按键来打破Python中的循环。怎么会这样呢? 在以下代码中, win32api.KeyPress(’H’) 的实际版本是什么? 修订: 我希望能够通过按 h 键来中断循环。 编辑: 我正在尝试制作一个反复报告鼠标位置的程序,并且需要一种退出该程序的机制。 请参阅修订的代码。 问题答案: 只是底层Windows低层库的接口。见功能: 确定在调用函

  • 问题内容: 我正在命令窗口(Windows 7,Python 3.1)中运行进程,我希望用户通过按ESCape键来中止该进程。但是,按ESCape键似乎没有执行任何操作:-(,循环永不中断。我也尝试从IDE(机翼)内部运行脚本,但同样,循环也不能中断。 以下是我的概念验证测试的简化版本… 如果有人能告诉我我可能会出问题的地方,我将不胜感激。 问题答案: Python 3字符串是unicode,因此

  • 问题内容: 我需要知道现在正在按下哪个键。我不是要捕获一些特定的键来触发事件或类似的事情, 我想知道现在按下了哪些键并显示它们的列表。 我还需要捕获特殊键,例如F1 … F12,Shift,Alt,Home,Windows等。基本上,键盘上的所有键都是如此。 我该如何在python中做到这一点?如何捕获键盘事件? 编辑 就是这样,您知道我不是要创建键盘记录程序。我正在尝试做一个诊断工具(我在笔记本

  • 我正在编写一个使用ChessClock类的游戏应用程序。这两个运动员每人都有一个钟。时钟每十分之一秒向自己发送一个信息流,如果运行,则减少剩余时间。当时间到期时,时钟会调用父视图组中的一个方法,该方法会停止时钟并设置一个标志,该标志会导致忽略进一步的触摸事件,从而用户无法再移动工件。我正在用kotlin写作,但我认为java程序员也会明白这一点: 这可以正常工作,但是如果用户按下后退按钮然后开始一

  • 假设有几个以编程方式创建的按钮,并且有一个通用的按钮处理程序。 如何理解处理器内部哪个按钮被按下? 而不在函数调用中传递一些特殊的东西。那不行:< code > onButtonClicked(" button " I); 例如,在JavaScript中,在处理程序内部有< code>$(this),它可以立即“理解”按下了哪个按钮。 也许在颤振中也有类似的机制?我想在按钮上挂起属性(事先不知道哪

  • 问题内容: 我的代码如下: 这段代码就是基于这个问题;我用它来熟悉自己。 我已经注意到,按3键3次才能输出一次文本。为什么是这样?我正在尝试将其用作事件循环,这太滞后了… 即使我键入3个 不同的 键,它也只输出第3个按键。 我怎样才能迫使它更快?有没有更好的方法来实现我要实现的目标? 谢谢! 逃避 问题答案: 您在循环中调用了该函数3次。尝试仅这样调用一次: