Лучшие практики для PyQt для пошаговой миграции с Python 2.7 на 3.x - PullRequest
0 голосов
/ 10 октября 2019

Я в процессе обновления кода для совместимости с Py2 / Py3. Часть исходного кода Python 2.7 использует PyQt4. Стандартная установка Python 3.7, которую мы будем внедрять постепенно в системах наших пользователей, не совместима с PyQt4.

В своем исследовании я обнаружил множество различных сложных и часто запутанных методов. заставить Python 2.7 хорошо играть с PyQt5, но это несостоятельное решение, поскольку основная причина обновления кросс-совместимости заключается в том, что:

  • пользователи, системы которых не были обновлены, могут продолжать использоватьобновленные модули / пакеты
  • разработчики должны будут поддерживать только одну версию, а не версию Py2 и версию Py3

Я почти ничего не нашелэто помогает заставить Python 3.7 взаимодействовать с PyQt4, поэтому обратно совместимое решение, хотя и предпочтительнее, также не представляется надежным, если только я (надеюсь) не ошибаюсь.

Другой альтернативой является изменение кода для проверки Python. версии и выполните импорт соответственно с помощью операторов if / else или try / кроме.

Я хотел бы знать, какой самый лучший и самый простой метод для кросс-совместимого кодирования для PyQt4 / 5 так, чтобы пользователи (большинство из которых НЕ являются разработчиками) не испытывали трудностей при обновлении и не нуждались в нихвнести изменения в свои системы, чтобы продолжать использовать обновленные программы, прежде чем их системы будут обновлены для них.

1 Ответ

0 голосов
/ 10 октября 2019

Несмотря на то, что [Py] Qt4 устарел, я знаю, что в каких-то больших или специфических средах обновления системы не могут быть легко или просто выполнены в ближайшем будущем. Я бы предложил вам использовать Qt.py , который является "прокладкой", которая позволяет (почти) прозрачно использовать все привязки Qt (PySide 1/2 и PyQt 4/5) для обоих Python 2и 3.

Общее преимущество довольно простое: вы сможете использовать готовый к PyQt5 код, сохраняя его пригодность для использования на старых системах, которые все еще полагаются на PyQt4.

Наиболееважная работа, которую вам нужно сделать, это изменить все подклассы QWidget как часть модуля QtWidgets вместо QtGui, и помните, что Qt.py автоматически пытается использовать sip API v2 (что делает все преобразования toPyObject ненужными и намного более прозрачными).
Имейте в виду, что некоторые классы требуют ручного импорта из текущей привязки, и, очевидно, существуют некоторые различия в поведении, но, кроме того, это значительно облегчит всю миграцию.

...