Можно ли полностью настроить приложение пользовательского интерфейса в Python 3, используя бесплатное и портативное (Windows дружественное) решение? - PullRequest
0 голосов
/ 03 мая 2020

Я и мои товарищи по команде хотим создать кодовую базу Python, включающую приложения с пользовательским графическим интерфейсом (GUI), которые могут быть легко развернуты внутри и даже распространены среди клиентов. Я ожидал, что эта задача станет тривиальной в 2020 году, но, похоже, я захожу в тупик / основные проблемы на каждом пути, который я исследую. Поэтому, проведя бесчисленные часы в исследованиях и безуспешных решениях проблем, я решил подвести итог своей цели и задать вопрос сообществу. Я уверен, что решение принесет пользу многим.

ПРИМЕЧАНИЕ. Я не ищу "рекомендации", но фактические решения, которые, как известно (основано на опыте), удовлетворяют конкретным c требованиям ниже.

Цель

Найти GUI инструментарий решение для Python 3 со следующими требованиями :

  1. Лицензия : бесплатная, для разработки и легкого коммерческого распространения.

  2. Портативность : портативная и прост в развертывании в Windows 10, но также в Ma c OS X и Raspberry Pi (и, возможно, в некоторых мобильных экспериментах).

  3. 2D-графика : Это должен предлагать способ представления и обновления 2D-графики в полуреальном времени (например, обновление данных Matclotlib FigureCanvas несколько раз в секунду).

  4. Дизайн пользовательского интерфейса : Приложение визуального дизайнера должно быть доступно для разработки и обновления определения интерфейса GUI (в текстовом файле, который может загружаться кодом Python).

  5. UI Styling : он должен предлагать простой способ полностью изменить стиль визуальных элементов, в идеале в CSS -подобный способ (например, настройка углового радиуса кнопок, цветов, теней или создание собственной темы).

Изученные попытки

Попытка 1: tkinter.ttk (TCL / Tk engine)

  1. [OK] Бесплатно

  2. [OK] Уже часть Python 3 дистрибутива

  3. [OK] FigureCanvasTkAgg

  4. [OK] Приложение Pygubu-Designer вместе с Pygubu.Builder Loader.

  5. [НЕ ОК] В то время как ttk предлагает некоторые цветовые стили ( ttk создание и использование пользовательской темы , Python пользовательских тем Tkinter ) и предопределенных тем, я не нашел никакого способа изменить стиль элементов управления (то есть настроить округлость и затенение кнопки). См. Ниже.

Проблемы со стилем при tkinter.ttk

  • Я могу mimi c структура элемента 'моллюска' Например, кнопка темы ttk ( Создает собственный стиль ttk, такой же, как тема 'clam' ttk (спецификация виджета кнопки c) ), но не воспроизводит фактический вид / отображение кнопки в python (угол округлость, градиент и т. д. c.).

  • Использование растровых изображений или рисование необработанных фигур на холсте не являются приемлемыми решениями ( Закругленная кнопка tkinter python)

  • РЕДАКТИРОВАТЬ: Изучая исходный код некоторых хороших тем ttk, выявляет, что все эффекты затенения и круглых кнопок выполняются с использованием растровых изображений, что значительно увеличивает сложность стиля. Кстати, сценарий TCL темы фактически интерпретируется (в реальном времени) за модулем tkinter Python.

Попытка 2: PyGOjbect (движок GTK 3)

  1. [OK] Свободно

  2. [НЕ ОК] Я не нашел способа развертывания на Windows 10 легко. См. Ниже.

  3. [OK] FigureCanvasGTK3Agg

  4. [OK] Glade (дизайнерское приложение сохраняет файлы .glade XML) и Gtk.Builder (загрузчик макета в Python).

  5. [OK] Gtk.CssProvider позволяет выполнять полную настройку с использованием CSS -подобного синтаксиса.

Проблемы развертывания с PyGObject на Windows 10

Попытка 3: wx Python (механизм wxWidgets)

  1. [OK] Свободно
  2. [OK] Стандарт Python multi -платформенный пакет
  3. [OK] FigureCanvasWxAgg
  4. [WARN] что-то вроде wxGlade с wxGlue могло бы работать, но не получило широкого распространения / поддержки
  5. [НЕ ОК] wxWidgets, кажется, фокусируется на «родных» элементах управления (Python - Пользовательское оформление в wx Python)

Попытка 4: PySide2 ( Qt engine)

  1. [НЕ ОК] Не бесплатно. Коммерческая лицензия Qt составляет $ 4 тыс. / Разработчик, если финансирование> $ 250 тыс.

  2. [OK] Может быть развернуто на Windows 10 и многих других платформах

  3. [OK] FigureCanvasQTAgg

  4. [OK] Приложение Qt-Designer и Python QUiLoader

  5. [OK] Таблицы стилей Qt ( QSS)

Попытка 5: движок веб-рендеринга

  1. [OK] Я мог бы изучить множество бесплатных опций для создания настольных приложений с использованием веб-технологий такие как REMI, PyWebView, eel, Flexx, Da sh, et c.

  2. [OK] Обычно это стандартные пакеты Python

  3. [WARN] Однако для обновления графика matplotlib обычно требуется обновить исходное растровое изображение IMG, что может быть неоптимальным для высоких значений refre sh

  4. [WARN] Возможно, я мог бы использовать стандартный визуальный HTML / Web-дизайнер, но потребовалась бы адаптация к модулю Python.

  5. [OK] HTML из put будет поддерживать все распространенные опции стиля CSS.

Проблемы с механизмами веб-рендеринга

  • Я еще недостаточно изучил эту опцию.
  • Возможно, проблему matplotlib refre sh можно было бы решить с помощью JS альтернативы построения, например plot.ly.
  • Но я чувствую, что уровень сложности значительно превосходит ожидания. Это мой единственный вариант?

РЕДАКТИРОВАТЬ: Попытка 6: Kivy

  1. [OK] Бесплатно (лицензия MIT)
  2. [OK] Стандартный Python мультиплатформенный пакет и buildozer для создания пакетов приложений.
  3. [OK] FigureCanvasKivyAgg (pip install kivy-garden, затем garden install matplotlib)
  4. [НЕ ОК] kivy-designer УСТАРЕЛ и альтернативы не найдено.
  5. [OK] Определение стиля kv-lang

Есть ли элегантное решение эта техническая задача, отвечающая всем 5 требованиям?

Спасибо

...