Общие макеты и архитектура для предоставления серверу командной строки базового графического интерфейса в Ubuntu/Quckly?

Несколько лет назад я написал утилиту командной строки python для местной радиостанции. Целью этой работы было расширение радиопотока с помощью метаданных, полученных из Календаря Google. Это означало, что любой, кто слушает радиостанцию ​​в потоке, сможет прочитать поток актуальной информации о том, что в данный момент воспроизводится, и сколько минут это будет до начала следующего шоу.

В основном этот сценарий работал очень хорошо и давал хорошее обслуживание в течение многих лет.

Недавно ко мне пришло новое требование: пользователи этого приложения хотят иногда останавливать, запускать или перезагружать процесс (например, из-за того, что изменилась информация о расписании). Вместо того, чтобы учить каждого сотрудника студии, как использовать командную строку, мы подумали о том, чтобы дать этому инструменту простой графический интерфейс.

Поскольку приложение будет разрабатываться и запускаться только в Ubuntu, мы выбрали Quickly в качестве простой среды разработки. Это хорошо документировано и обеспечивает разработчикам небольшую нагрузку при знакомстве с платформой.

Мы надеемся, что первоначальный дизайн приложения будет состоять из подобной браузеру ленты инструментов (запуск, остановка, перезагрузка). Большая панель, содержащая сообщение о состоянии прокрутки. Ниже будет небольшая строка состояния, которая даст некоторое представление о текущем внутреннем состоянии программы.

Будучи совершенно новым для программирования GUI, я все еще не уверен, как структурировать интерфейс: остаются загадки:

  1. Какой вид управления следует использовать для прокручиваемой текстовой панели, куда будут поступать сообщения журнала. Это должно быть доступно только для чтения, но обновляется каждый раз при создании сообщения журнала. Я планировал создать собственный обработчик журналов Python, который перенаправляет любое сообщение журнала на эту панель - но какой самый простой способ сделать это?

  2. Скрипт, который у меня есть в данный момент, блокируется, когда он ничего не делает с time.sleep () - это явно не годится для GUI, так каково правильное поведение процесса в приложении GUI, которому какое-то время нечего делать?

  3. Мой процесс изначально был разработан для работы в терминале как единый поток. Учитывая, что мне нужно, чтобы он работал более или менее, как прежде, это означает, что я должен рассмотреть вопрос о размещении графического интерфейса в отдельном потоке рабочего процесса. Существуют ли документированные шаблоны для того, как сделать это в рамках Quickly?

  4. Двигаясь дальше - есть ли хороший способ заставить приложения, разработанные с помощью Quickly, работать на платформах, отличных от Ubuntu? Например, могу ли я легко адаптировать свое приложение для работы на любой другой ОС на базе Linux. Как насчет чего-то не связанного, как OSX или Windows?

Спасибо!

1 ответ

  1. Вы можете использовать GtkTextView, только для чтения. Может быть, вы можете распространить его на трубу с выводом.
  2. Вы можете использовать idle_add () (доступно в Glib) для запуска вызова метода / функции в любое время, когда программа простаивает.
  3. Вы можете проверить, как работать с потоками в Pygtk.
  4. PyGTK является портативным. Quickly - это обертка для создания приложений с PyGTK/PyGObject и некоторых дополнительных тонкостей. В зависимости от вашего кода, это не должно быть очень трудно сохранить его переносимым.
Другие вопросы по тегам