Я и мои товарищи по команде хотим создать кодовую базу Python, включающую приложения с пользовательским графическим интерфейсом (GUI), которые могут быть легко развернуты внутри и даже распространены среди клиентов. Я ожидал, что эта задача станет тривиальной в 2020 году, но, похоже, я захожу в тупик / основные проблемы на каждом пути, который я исследую. Поэтому, проведя бесчисленные часы в исследованиях и безуспешных решениях проблем, я решил подвести итог своей цели и задать вопрос сообществу. Я уверен, что решение принесет пользу многим.
ПРИМЕЧАНИЕ. Я не ищу "рекомендации", но фактические решения, которые, как известно (основано на опыте), удовлетворяют конкретным c требованиям ниже.
Цель
Найти GUI инструментарий решение для Python 3 со следующими требованиями :
Лицензия : бесплатная, для разработки и легкого коммерческого распространения.
Портативность : портативная и прост в развертывании в Windows 10, но также в Ma c OS X и Raspberry Pi (и, возможно, в некоторых мобильных экспериментах).
2D-графика : Это должен предлагать способ представления и обновления 2D-графики в полуреальном времени (например, обновление данных Matclotlib FigureCanvas несколько раз в секунду).
Дизайн пользовательского интерфейса : Приложение визуального дизайнера должно быть доступно для разработки и обновления определения интерфейса GUI (в текстовом файле, который может загружаться кодом Python).
UI Styling : он должен предлагать простой способ полностью изменить стиль визуальных элементов, в идеале в CSS -подобный способ (например, настройка углового радиуса кнопок, цветов, теней или создание собственной темы).
Изученные попытки
Попытка 1: tkinter.ttk (TCL / Tk engine)
[OK] Бесплатно
[OK] Уже часть Python 3 дистрибутива
[OK] FigureCanvasTkAgg
[OK] Приложение Pygubu-Designer вместе с Pygubu.Builder Loader.
[НЕ ОК] В то время как 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)
[OK] Свободно
[НЕ ОК] Я не нашел способа развертывания на Windows 10 легко. См. Ниже.
[OK] FigureCanvasGTK3Agg
[OK] Glade (дизайнерское приложение сохраняет файлы .glade XML) и Gtk.Builder (загрузчик макета в Python).
[OK] Gtk.CssProvider позволяет выполнять полную настройку с использованием CSS -подобного синтаксиса.
Проблемы развертывания с PyGObject на Windows 10
Попытка 3: wx Python (механизм wxWidgets)
- [OK] Свободно
- [OK] Стандарт Python multi -платформенный пакет
- [OK] FigureCanvasWxAgg
- [WARN] что-то вроде wxGlade с wxGlue могло бы работать, но не получило широкого распространения / поддержки
- [НЕ ОК] wxWidgets, кажется, фокусируется на «родных» элементах управления (Python - Пользовательское оформление в wx Python)
Попытка 4: PySide2 ( Qt engine)
[НЕ ОК] Не бесплатно. Коммерческая лицензия Qt составляет $ 4 тыс. / Разработчик, если финансирование> $ 250 тыс.
[OK] Может быть развернуто на Windows 10 и многих других платформах
[OK] FigureCanvasQTAgg
[OK] Приложение Qt-Designer и Python QUiLoader
[OK] Таблицы стилей Qt ( QSS)
Попытка 5: движок веб-рендеринга
[OK] Я мог бы изучить множество бесплатных опций для создания настольных приложений с использованием веб-технологий такие как REMI, PyWebView, eel, Flexx, Da sh, et c.
[OK] Обычно это стандартные пакеты Python
[WARN] Однако для обновления графика matplotlib обычно требуется обновить исходное растровое изображение IMG, что может быть неоптимальным для высоких значений refre sh
[WARN] Возможно, я мог бы использовать стандартный визуальный HTML / Web-дизайнер, но потребовалась бы адаптация к модулю Python.
[OK] HTML из put будет поддерживать все распространенные опции стиля CSS.
Проблемы с механизмами веб-рендеринга
- Я еще недостаточно изучил эту опцию.
- Возможно, проблему matplotlib refre sh можно было бы решить с помощью JS альтернативы построения, например plot.ly.
- Но я чувствую, что уровень сложности значительно превосходит ожидания. Это мой единственный вариант?
РЕДАКТИРОВАТЬ: Попытка 6: Kivy
- [OK] Бесплатно (лицензия MIT)
- [OK] Стандартный Python мультиплатформенный пакет и buildozer для создания пакетов приложений.
- [OK] FigureCanvasKivyAgg (
pip install kivy-garden
, затем garden install matplotlib
) - [НЕ ОК] kivy-designer УСТАРЕЛ и альтернативы не найдено.
- [OK] Определение стиля kv-lang
Есть ли элегантное решение эта техническая задача, отвечающая всем 5 требованиям?
Спасибо