我有一个带有Sense帽子的Raspberry pi。我已经制作了一个binary clock,我希望在Sense hat的显示屏上显示并保持更新。但是,我希望能够使用操纵杆中间来打开和关闭时钟。一切正常,除了我的时钟更新循环阻止任何新输入一旦开始。
from sense_hat import SenseHat
from signal import pause
def show_clock():
# clock-logic
def pushed_middle(event):
while 1:
show_clock()
sense = SenseHat()
sense.stick.direction_middle = pushed_middle
pause
我一直在考虑如何解决这个问题。如何允许脚本/时钟继续运行并仍然接受操纵杆的新操作。但是一旦while循环开始,我就被卡住了。我不确定谷歌的用途。我已经开始研究async / await,但这似乎是一个Python 3.5+功能,我的pi只有2.7.9 / 3.4.2(我只是sudo apt-get update/upgrade
- ed)。我也试过在程序中移动循环,但无论我放在哪里都会阻塞所有内容。
答案 0 :(得分:0)
您需要的是多线程。在这里,您可以通过示例找到一个很好的解释。
答案 1 :(得分:0)
我通过使用全局变量解决了它:
from sense_hat import SenseHat
from signal import pause
def show_clock():
global clock_is_on
while clock_is_on: # clock-loop
# clock-logic
# ...
events = sense.stick.get_events()
for event in events:
if event.direction == "middle" and event.action == "pressed":
clock_is_on = False
time.sleep(1) # only need to update clock once every second
def pushed_middle(event):
if not clock_is_on:
clock_is_on = True
show_clock()
sense = SenseHat()
clock_is_on = False
sense.stick.direction_middle = pushed_middle
pause()