【问题标题】:Binding a Keyboard Key to a Function - Python KeyListener将键盘键绑定到函数 - Python KeyListener
【发布时间】:2019-02-27 13:55:33
【问题描述】:

“您按下了 Enter 键!”

每当我按下 Key(z) 时,都会执行该功能:

#Pseudocode:
bind(<Enter>, function_x)

我目前正在开发一个 python 程序,它将在 恒定循环中运行。它只在控制台(无 GUI) 上运行,但我仍然需要能够随时与程序交互而无需程序要求输入。

【问题讨论】:

  • 主循环使 Tkinter 能够可能在任意时间响应键盘事件。试试pynput,它可以安装一个键盘监听器(这基本上是一个在另一个线程中运行的事件循环),但请注意,来自监听器的回调必须在那个线程中运行,而不是你的主线程。

标签: python python-3.x listener key-bindings


【解决方案1】:

几个模块解决了这个问题

密码输入 (pip install pynput)

用于处理和控制一般输入的简单模块

from pynput import keyboard
from pynput.keyboard import Key

def on_press(key):
    #handle pressed keys
    pass

def on_release(key):
    #handle released keys
    if(key==Key.enter):
        function_x()

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

(见pynput docs


键盘 (pip install keyboard)

一个模拟和处理键盘输入的简单模块

keyboard.add_hotkey('enter', lambda: function_x())

(见Keyboard docs


Tkinter

集成的 UI 模块,可以跟踪焦点线程上的输入

from tkinter import Tk
root = Tk() #also works on other TK widgets
root.bind("<Enter>", function_x)
root.mainloop()

注意:这些解决方案都以某种方式使用线程。开始监听键后,您可能无法执行其他代码。

有用的线程: KeyListenersBinding in Tkinter

随意添加更多解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多