【发布时间】: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