【问题标题】:Best way to control python in a loop with keyboard?用键盘循环控制python的最佳方法?
【发布时间】:2021-12-06 16:02:55
【问题描述】:

python 新手,想为 Raspberry Pi 编写应用程序,但想先在我的计算机上开发它而不必组装所有按钮,所以我想只使用键盘代替按钮就可以了。但我似乎找不到一个好的解决方案来同时循环脚本和观察键盘输入。

具体来说,我正在尝试运行一个检查按钮状态的循环。如果任何按钮亮起,它将打开共享设备。如果该按钮随后熄灭,它将在一段时间后关闭共享设备,除非任何其他按钮处于打开状态。但是,如果在按钮熄灭的时间段内,设备还没有关机,再有一个按钮亮起,设备就不会关机。

我认为使用键盘和数字 1-8 表示我将连接到 Pi 的 8 个按钮会更容易开发。

如果我使用

x = input()

脚本停止并等待输入,但我需要它继续在后台运行。

所以我尝试使用键盘模块

import keyboard
import time

while True: #   
    try:
        if keyboard.is_pressed('q'): #
            print("you pressed q")
    except:
        print("no key")
    currenttime = time.time()
    print (f'the new time is {currenttime}' )
    time.sleep(1)

但它有时只接受键盘输入。就像它在睡觉时不一样,我用它作为脚本是否忙于做其他事情的例子。

我在四处搜索时发现了这段代码

from pynput import keyboard
def on_press(key):
    try:
        print('alphanumeric key {0} pressed'.format(
            key.char))
    except AttributeError:
        print('special key {0} pressed'.format(
            key))

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

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

除了安全问题之外,它还可以抓取键盘输入,但我不知道将循环放在哪里。

我也玩过 tkinter,但由于我没有尝试构建 GUI,这似乎不是正确的路径。

【问题讨论】:

  • 是的,tkinter 不是最好的方法。您是否尝试过使用threading?
  • 线程听起来很复杂,但我会研究一下。谢谢。
  • 请澄清确切的问题,你甚至想要实现什么,只是有代码也可以并行注册击键?还有一个keyboard 模块。你为什么要使用tkinter?它是一个 GUI 库
  • 感谢您的反馈,我添加了一些说明。

标签: python tkinter raspberry-pi keyboard pynput


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2011-12-19
    • 2019-01-27
    • 2017-09-22
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多