MyTetra Share
Делитесь знаниями!
PyQt или PySide - какой из них использовать
Время создания: 29.07.2019 23:51
Раздел: !Закладки - Python
Запись: xintrea/mytetra_db_adgaver_new/master/base/1533836701obfgj6rz9h/text.html на raw.githubusercontent.com

PyQt или PySide - какой из них использовать

Я начал изучать немного питона и теперь хотел бы немного поиграть с gui-building. Qt кажется хорошим выбором из-за его кросс-платформенности.
Теперь, похоже, доступны две привязки: PyQt от Riverbank Computing и PySide, первоначально разработанный Nokia.
Итак, какой из них выбрать? Все, что я могу найти, это сравнение двухлетних функций, но какие отличия есть в настоящее время?
Какой из них проще в использовании, имеет более/лучшую документацию? Оба находятся в активном развитии?
Лицензирование меня не очень беспокоит, так как я не собираюсь писать коммерческие приложения.

50
python pyqt pyside
задан shutefan 31 июля '11 в 12:58
источник поделиться

6 ответов

Оба инструментария активно поддерживаются и в настоящее время более или менее равны по характеристикам и качеству. Есть лишь незначительные, незначительные различия.

Тем не менее, я бы рекомендовал PySide для Python 2. Он имеет более разумный API, в основном он не раскрывает типы Qt, которые имеют прямой эквивалент в Python (например, QString, QList и т.д.) или которые полностью излишним из-за динамической природы Python, как QVariant. Это позволяет избежать многих утомительных преобразований в типы Qt и из них, что облегчает программирование и позволяет избежать многих ошибок.

PyQt также поддерживает этот современный API и использует его по умолчанию для Python 3, но не для Python 2 для поддержки обратной совместимости.

20
ответ дан lunaryorn 31 июля '11 в 15:50
источник поделиться

Существует также лицензионная разница. PySide - LGPL, а PyQt - GPL. Это может иметь значение, если вы не хотите создавать свой проект с открытым исходным кодом. Хотя PyQt всегда имеет приемлемую версию, доступную по довольно разумной цене.

Я пытаюсь найти документацию PySide более интуитивно понятной. API, на мой взгляд, немного больше Pythonic, и скорость исправления ошибок в настоящий момент впечатляет.

PyQt имеет то преимущество, что Python 3 поддерживает и поддерживает. Для него существует гораздо больше сторонних документов/учебников.

19
ответ дан Gerald 02 авг. '11 в 4:52
источник поделиться

Недавно я портировал значительную базу кода (более 8000 строк кода) из PyQt в PySide.

Сейчас я бы сказал, что PyQt - это гораздо более зрелый, эффективный и стабильный проект. Я попал в ряд ошибок в PySide и подозреваю, что любой большой проект столкнется с проблемами. Сказав это, я сообщил об ошибке в проекте, и он был исправлен и в новом выпуске в течение нескольких недель. У меня также есть проблема, когда приложение занимает около 15 секунд, чтобы выйти. Я еще не потратил время, чтобы узнать, почему. Однако это только вопрос времени, прежде чем не будет причин для выбора PyQt над PySide.

Если вы решите пойти с PyQt, убедитесь, что вы используете API v2 повсюду. Это лучший API и облегчит любой будущий переход на PySide. Также, если вы используете порт, просто следуйте инструкциям в вики PySide. Даже для приложения с 8+ kloc, состоящего из примерно 20 исходных файлов, он просто принял второй день.

15
ответ дан Simon Hibbs 23 авг. '11 в 13:44
источник поделиться

Важным фактом является то, что 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, чтобы он работал так, как должен.

Используемые файлы:

  • pyqt4pysideimporter.py
  • zip_imp.py (для поддержки py2exe)
  • make_gui.py (my script для создания файлов .ui и .qrc с помощью инструментов pyside или pyqt4 и фиксации импорта для согласования; опросы для файл изменяет и перестраивает измененные - ничто не высокотехнологичное, как inotify).

Затем вы просто import pyqt4pysideimporter и pyqt4pysideimporter.autoselect() (как в main.py в этом репозитории). А после этого вы можете просто import PyQt4.

Кроме того, было также заявлено несколько дней назад в списке рассылки PySide, который они планируют полностью поддерживать Python 3 в течение следующих нескольких месяцев.

8
ответ дан Chris Morgan 02 авг. '11 в 6:37
источник поделиться

Хотя они могут иметь аналогичный интерфейс для классов 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 для компиляции целевого плагина.

7
ответ дан jichi 09 окт. '12 в 19:09
источник поделиться

У меня есть приложение Python на 20 тыс. строк, которое я безуспешно пытался преобразовать в PySide. Конверсия проста, и большинство функций работает. Существует несколько методов, которые не реализованы, потому что они "устарели", поэтому я должен был их исправить. Все в порядке. В Windows, используя PySide-1.1.2, оператор '==' не реализован для многих объектов Qt. Один из способов - сказать: "if id (item1) == id (item2):". Другое наблюдение заключается в том, что PySide казался заметно медленнее. Я не изолировал PySide как причину медленности, но проблема исчезла, когда я вернулся к PyQt.

Наконец, на данный момент комплект Android с PySide не кажется готовым к прайм-тайм.

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования