|
|||||||
PyQt или PySide - какой из них использовать
Время создания: 29.07.2019 23:51
Раздел: Разные закладки - Python
Запись: xintrea/mytetra_db_adgaver_new/master/base/1533836701obfgj6rz9h/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Я начал изучать немного питона и теперь хотел бы немного поиграть с gui-building. Qt кажется хорошим выбором из-за его кросс-платформенности. Теперь, похоже, доступны две привязки: PyQt от Riverbank Computing и PySide, первоначально разработанный Nokia. Итак, какой из них выбрать? Все, что я могу найти, это сравнение двухлетних функций, но какие отличия есть в настоящее время? Какой из них проще в использовании, имеет более/лучшую документацию? Оба находятся в активном развитии? Лицензирование меня не очень беспокоит, так как я не собираюсь писать коммерческие приложения. 6 ответовОба инструментария активно поддерживаются и в настоящее время более или менее равны по характеристикам и качеству. Есть лишь незначительные, незначительные различия. Тем не менее, я бы рекомендовал PySide для Python 2. Он имеет более разумный API, в основном он не раскрывает типы Qt, которые имеют прямой эквивалент в Python (например, QString, QList и т.д.) или которые полностью излишним из-за динамической природы Python, как QVariant. Это позволяет избежать многих утомительных преобразований в типы Qt и из них, что облегчает программирование и позволяет избежать многих ошибок. PyQt также поддерживает этот современный API и использует его по умолчанию для Python 3, но не для Python 2 для поддержки обратной совместимости. Существует также лицензионная разница. PySide - LGPL, а PyQt - GPL. Это может иметь значение, если вы не хотите создавать свой проект с открытым исходным кодом. Хотя PyQt всегда имеет приемлемую версию, доступную по довольно разумной цене. Я пытаюсь найти документацию PySide более интуитивно понятной. API, на мой взгляд, немного больше Pythonic, и скорость исправления ошибок в настоящий момент впечатляет. PyQt имеет то преимущество, что Python 3 поддерживает и поддерживает. Для него существует гораздо больше сторонних документов/учебников. Недавно я портировал значительную базу кода (более 8000 строк кода) из PyQt в PySide. Сейчас я бы сказал, что PyQt - это гораздо более зрелый, эффективный и стабильный проект. Я попал в ряд ошибок в PySide и подозреваю, что любой большой проект столкнется с проблемами. Сказав это, я сообщил об ошибке в проекте, и он был исправлен и в новом выпуске в течение нескольких недель. У меня также есть проблема, когда приложение занимает около 15 секунд, чтобы выйти. Я еще не потратил время, чтобы узнать, почему. Однако это только вопрос времени, прежде чем не будет причин для выбора PyQt над PySide. Если вы решите пойти с PyQt, убедитесь, что вы используете API v2 повсюду. Это лучший API и облегчит любой будущий переход на PySide. Также, если вы используете порт, просто следуйте инструкциям в вики PySide. Даже для приложения с 8+ kloc, состоящего из примерно 20 исходных файлов, он просто принял второй день. Важным фактом является то, что PyQt4 имеет две версии своих API для некоторых вещей. Элементы версии 1 - это такие вещи, как использование QString вместо unicode и QVariant (в основном просто оболочка, я считаю, что я никогда не делал ничего, что ее использует) вместо обернутого. Версия 2, которая может быть включена в Python 2 и включена в Python 3, намного лучше (хотя она по-прежнему неспокойна во многих местах - PySide тоже, но она становится заметно лучше. Есть еще некоторые несовместимости с ними: PyQt4 имеет QtCore.pyqt(Signal|Slot|Property), PySide имеет QtCore.(Signal|Slot|Property). Для моего собственного проекта я решил, что хочу поддержать оба без изменений кода. Я предпочитаю PySide, но в Windows я распространяю с PyQt4, поскольку в настоящее время он довольно мал для распространения в настоящее время. Мое решение состоит в том, чтобы проверить PySide, и если он там вставляет крючок импорта для перенаправления импорта PyQt4 в PySide, или если это не так, исправьте PyQt4, чтобы он работал так, как должен. Используемые файлы:
Затем вы просто import pyqt4pysideimporter и pyqt4pysideimporter.autoselect() (как в main.py в этом репозитории). А после этого вы можете просто import PyQt4. Кроме того, было также заявлено несколько дней назад в списке рассылки PySide, который они планируют полностью поддерживать Python 3 в течение следующих нескольких месяцев. Хотя они могут иметь аналогичный интерфейс для классов Qt/С++, их интерфейс для макросов Qt/С++, таких как signal/slot/property, очень отличается.Постановка одного на другой - непростая задача. Было бы лучше принять правильное решение в самом начале. Помимо различий в грамматике/лицензии, я просто хочу указать на некоторый недостаток PyQt в языковой привязке, что может быть необходимо для написания проекта QML в Python.Эти различия полностью подталкивают меня к PySide от PyQt. qmlRegisterType qmlRegisterType необходим для создания привязки С++ во время выполнения с QML.В PySide это часть PySide.QtDeclarative. И это очень хорошо работает с Python. В PyQt qmlRegisterType не существует. И я не мог найти альтернативный подход.Я знаю, что простая задача может быть выполнена путем установки QML-контекста.Но если вам действительно нужно связать время исполнения с qmlRegister и Q_INVOKABLE, я думаю, что PySide - единственный выбор на данный момент. Shiboken VS SIP Оба могут обернуть Qt/С++ в плагин python.Для Shiboken я считаю, что это проще и требует меньше кодирования.Просто создайте xml-систему, включая НАЗВАНИЕ классов, которые вы хотите экспортировать, и все.Shiboken не требует дополнительных ручных описаний для структуры целевых классов. Для SIP требуется дополнительное кодирование. Нам нужно будет создать SIP файл, который почти повторяет все заголовки С++.Это требует не только НАЗВАНИЕ класса, но и ПОДРОБНОСТИ, какие методы имеют целевые классы.Если класс С++ находится в хорошем дизайне с использованием Pimp, и мы хотим экспортировать все его методы, SIP должен обеспечить способ автоматического экспорта всех методов класса, которые он не может в данный момент.Это также добавит бремя для поддержания согласованности между заголовками SIP и С++. Но я должен сказать, что документация для Shiboken на вики Qt очень плохая и вводящая в заблуждение.Создание плагина Python с помощью Shiboken в Windows необязательно требует CMake. generatorrunner также не требуется.Я использую только Windows cmd script для вызова shiboken и qmake pro для компиляции целевого плагина. У меня есть приложение Python на 20 тыс. строк, которое я безуспешно пытался преобразовать в PySide.Конверсия проста, и большинство функций работает.Существует несколько методов, которые не реализованы, потому что они "устарели", поэтому я должен был их исправить. Все в порядке.В Windows, используя PySide-1.1.2, оператор '==' не реализован для многих объектов Qt. Один из способов - сказать: "if id (item1) == id (item2):".Другое наблюдение заключается в том, что PySide казался заметно медленнее. Я не изолировал PySide как причину медленности, но проблема исчезла, когда я вернулся к PyQt. Наконец, на данный момент комплект Android с PySide не кажется готовым к прайм-тайм. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|