Как получить скрипт для запуска при запуске, который содержит окно tkinter - PullRequest
1 голос
/ 21 мая 2019

Мне нужен скрипт python для запуска при запуске, чтобы при включении Raspberry Pi запускался скрипт. Скрипт имеет окно Tk и холст с фоновым изображением, которое заполняет дисплей 16: 9. На холсте над фоном нарисованы фигуры.

Я успешно создал эту часть проекта. Это дисплей приборной панели с мигающими стрелками, которые мигают синхронно со светодиодами, подключенными к контактам GPIO и запускаемыми кнопками. Я использую gpiozero для кнопок и светодиодов и tkinter для графики. Когда я запускаю его из IDE, все прекрасно работает.

Все изображения, формы, кнопки, светодиоды, окно, холст и функции определены правильно.

Вот функция для левого указателя поворота:

def left_blinker():
    global left_arrow

    if not left_LED.value:
        left_LED.on()

    elif left_LED.value:
        left_LED.off()

    if c.itemcget(left_arrow, "fill") == "black":
        left_arrow = c.create_polygon(coords, bg="green")

    elif c.itemcget(left_arrow, "fill") == "green":
        left_arrow = c.create_polygon(coords, bg="black")

    if left_button.value:
        w.after(300 if left_led.value else 700, left_blinker)

Все это прекрасно работает, когда я запускаю его из IDE. Он заполняет экран центрированным фоновым изображением и полигонами (стрелками), правильно расположенными в графическом интерфейсе, и мигает синхронно, когда кнопка удерживается, и останавливается, когда кнопка отпущена. Скрипт python работает как положено.

Когда я запускаю файл из rc.local, чтобы он автоматически запускался при включении питания без окна tkinter, он работал - мигалки, светодиоды и все. Но когда я добавляю даже один

w = Tk()

он вообще не будет запускаться автоматически. Этот скрипт заканчивается на

w.mainloop()

Вот запись в rc.local:

python3 /home/pi/BMW_LR_lights &

exit 0

Даже тестовый скрипт, содержащий ТОЛЬКО окно Tjk, не будет запускаться из rc.local. Все остальное работает нормально, так как нет объектов tkinter.

...