Недавно я принимал участие в беседах о создании шаблона Quickly для приложений Qt и QtQuick Ubuntu. Идея состоит в том, чтобы сделать разработку приложений Qt из концепции в пакет так же легко, как сейчас, с помощью GTK, на котором основан шаблон Quickly приложения Ubuntu.
Намерение по-прежнему заключается в использовании Python в качестве базового языка программирования, и первый вопрос, который приходит на ум: какие привязки Python следует использовать PyQt или PySide ?
Я хотел бы услышать от людей, имеющих опыт в обеих технологиях, каковы плюсы и минусы каждого из них, насколько хорошо каждый из них обслуживается, насколько хорошо Qt API привязан к привязкам и т. Д.
Спасибо!
Ответы:
И PyQt4, и PySide имеют очень похожие отображения в API Qt. Есть, однако, некоторые различия, мои мнения по которым описаны ниже:
Обслуживание
Они оба в хорошем состоянии. На данный момент PySide выпускает гораздо больше регулярных выпусков: я думаю, что он более тесно связан с Qt, чем PyQt4, и поскольку новый проект имеет более активное сообщество в данный момент. Однако это только мое впечатление, и оно может быть ошибочным.
PyQt4 имеет опцию коммерческой поддержки (я не знаю, верно ли это для PySide или нет).
Лицензия
PyQt4 выпускается либо под коммерческой лицензией, либо под лицензией GPL ; PySide выпущен под LGPL . Для коммерческих приложений это существенная разница.
Версии API и Python
PyQt4 поддерживает два разных API. Версия API 1 используется по умолчанию для приложений Python 2.x, а версия API 2 - по умолчанию для приложений Python 3.x.
PySide поддерживает только один API, что примерно эквивалентно API версии 2. PyQt4. API версии 2 (или API PySide) гораздо приятнее работать, чем версия 1. API PyQt4. В версии 1 API есть много кода, который выполняет Python. Строки
QtCore.QString
с и обратно. В версии API 2 (и PySide) вы просто используете строки Python. Ниже вы найдете простой способ переключения между PyQt4 и PySide, если вы хотите поиграть с обоими.Кажется, большая часть кода, который я пишу, одинаково хорошо работает в PyQt4 и PySide. Исторически, я всегда использовал PyQt4 для Python GUI, но большинство новых вещей, которые я пишу сейчас, использует PySide (в основном из-за более гибкого лицензирования). Я, безусловно, рекомендую вам попробовать оба и посмотреть, как вы их найдете. Если вы используете QtVariant.py (ниже), переключение между ними будет тривиальным, и когда вы примете решение, будет только один файл, который нужно обновить.
Документация
Документация для PyQt4 и PySide генерируется автоматически из основной документации Qt . На мой взгляд, документация PySide - лучшее представление того, что вы на самом деле используете, но на практике я склонен использовать документацию Qt в любом случае (мысленно перевести документацию C ++ в python довольно просто).
Внешние библиотеки
Если вы используете внешние библиотеки, некоторые из них еще не работают с PySide. Честно говоря, не так много вам нужно для работы с PySide, но пару лет назад я написал код, в котором использовались twisted (с реактором Qt) и matplotlib, что вынудило меня отказаться от использования PyQt4, а не PySide. , Я думаю, что вполне вероятно, что эти библиотеки будут обновлены для поддержки обоих, но я не проверял.
Заставить код работать с PyQt4 или PySide
Предполагая, что вы используете python 2.x, вы можете довольно легко сделать свой код совместимым как с PySide, так и с PyQt4, создав QtVariant.py и используя:
или что угодно. QtVariant.py, который я использую, выглядит следующим образом:
источник
return QtUiTools.QUiLoader().load(uifile)
принятия пути к файлу без какого-либо из этого шаблона QFile.