Запуск процесса, который должен вызывать графический интерфейс на Raspberry Pi3, вызывает tkinter.TclError - PullRequest
0 голосов
/ 28 августа 2018

У меня есть беспроводная сеть из нескольких Raspberry Pi 3. Для параллельного и удаленного запуска процессов на всех устройствах, которые я использую Fabric. Все Pi оснащены сенсорным 5-дюймовым сенсорным дисплеем Elecrow. Я хочу добавить графический интерфейс в свой проект для отображения ip-адреса и того, какой на данный момент в программе находится Pi. В качестве первого подхода я просто хочу отобразить информацию. нет взаимодействия через кнопки или около того.

Если я запускаю файл GUI на Pi локально, он работает просто отлично. Как только я хочу запустить его параллельно на всех Pi с моего Mac, я получаю одинаковую ошибку со всех устройств:

out: Traceback (most recent call last):
out:   File "gui.py", line 108, in <module>
out:     main()
out:   File "gui.py", line 95, in main
out:     root = tk.Tk()
out:   File "/usr/lib/python2.7/lib-tk/Tkinter.py",line 1823, in __init__
out:     self.tk = _tkinter.create(screenName,  baseName, className, interactive, wantobjects, useTk, sync, use)
out: _tkinter.TclError: no display name and no $DISPLAY environment variable

Для моего графического интерфейса я определил следующие такты:

@parallel
def start_gui():
    code_dir = '/home/pi/test-python'

    with cd(code_dir):
        run("python gui.py")

Я потратил некоторое время на поиск проблемы, но, похоже, ни одно из решений не подходит для моего случая. Кто-нибудь знает, как я мог установить эту переменную среды отображения, чтобы я мог запускать свою программу через фабрику?

Спасибо

Редактировать: Я нашел решение, которое очень простое и заняло всего 2 часа чтения документации на ткань, но оно того стоило. Для тех, кто просто ищет быстрое решение, я выложу код моего файла:

@parallel
def start_gui():
  code_dir = '/home/pi/test-python'

  with cd(code_dir):
      with settings(password='1234'):
          with shell_env(DISPLAY=':0'):
              run("python gui.py")
...