Функция show_message API Sense Hat не может быть остановлена ​​в середине сообщения - PullRequest
0 голосов
/ 26 апреля 2018

Я супер новый для языка Python.Я хочу перестать отображать сообщение на Sense Hat на Raspberry Pi «MSG перед средней палкой», когда я отпускаю палку, начинаю печатать сообщение «Привет» из метода demo_display_string.

import threading
import time
from sense_hat import SenseHat

busy = True
DISPLAY_STRING = "Hey"
run = False

def demo_display_string(arg_list):
    global DISPLAY_STRING
    global run
    run = True
    while run:
        sense.show_message(DISPLAY_STRING, text_colour=(255,0,0))
        for event in sense.stick.get_events():
            if event.action == 'released':
                print(event.action)
                if event.direction == 'middle':
                    run = False

def menu():
    global CURRENT_POSITION_IN_MENU
    busy = False
    exists = False
    while True:
        if not busy:
            # msg = positions[CURRENT_POSITION_IN_MENU][1]
            msg = "MSG before middle stick"
            sense.show_message(msg, scroll_speed=0.05)

        for event in sense.stick.get_events():
            sense.clear()
            if event.action == 'released':
                if event.direction == 'middle':
                    busy = True
                    demo_display_string(None)
                    busy = False

sense = SenseHat()

menu()

Кажется, это работает, но проблема в том, что sense.show_message блокируется и не остановится до конца сообщения.Поэтому, когда я нажимаю джойстик в середине «MSG перед средней флешкой», он все равно отображает все сообщение, а после этого начинает отображать «Эй».Я хочу, чтобы это происходило в реальном времени, когда я нажимаю стик, сообщение меняется.

1 Ответ

0 голосов
/ 21 сентября 2018

Функция show_message не имеет возможности прерывать прокрутку текста.Таким образом, python показывает весь текст, а затем продолжает цикл обработки событий.Вы должны написать многопоточную версию show_message, которая проверяет событие прерывания через равные промежутки времени и запускает это событие из другого потока в случае ввода джойстика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...