Для тех кто пишет расширения на PyQt/PySide для CG-софтов.
Когда я только начинал писать тулзы под Maya (тогда еще версия 2010-2011) мне приходилось ручками ставить PyQt4 под Maya. Даже написал мануалы по установке на своём сайте. Но потом стал доступен из коробки PySide и позже он обновится до PySide2. Для некоторых систем была поддержка PyQt5.
И как простому разработчику поддерживать этот зоопарк? Ведь хочется чтобы тул работал на любой версии (вы тоже делали модуль что-то типа import_qt.py?😁)
На помощь приходит проект Qt.py который поставил себе цель унифицировать использование Qt-биндингов вне зависимости от среды где запускается код. Те, кто давно пишут на Qt, скорее всего знают этот проект.
Он стал стандартом для CG-индустрии и используется в топовых студиях и проектах.
Qt․py помогает запускать один и тот же код на разных платформах с разными вариантами Qt-библиотек. Это может быть как интеграция в CG-софт, так и переносимость стендалонов между разными платформами с разными версиями Python.
Я решил рассказать о некоторых особенностях работы с этой библиотекой.
Сегодня о том, как установить и использовать Qt․py и что это вам даёт.
Установка
pip install Qt.py
Чтобы начать использовать Qt․py в коде достаточно заменить импорт вашего варианта Qt-биндинга на Qt․py
from [PySide|PyQt4|PySide2|PyQt5] import QtWidgets
=>
from Qt import QtWidgets
Теперь ваш код будет поддерживать любой вариант биндинга Qt в Python.
При этом не потребуется использовать if-else конструкции под разные версии. Все вызовы теперь одинаковы.
Всё что нужно сделать, это написать его по правилам PySide2. Именно эта версия была взята за основу.
Приоритет импорта такой:
1. PySide2
2. PyQt5
3. PySide
4. PyQt4
Что именно загрузилось можно посмотреть в переменной __binding__
>>> import Qt
>>> Qt.__binding__
'PySide2'
Приоритет имопрта можно изменить через переменные QT_PREFERRED_BINDING и QT_PREFERRED_BINDING_JSON. Причем под каждый проект оверрайды можно настраивать индивидеально.
#qt#libs
Venezuela Primera División🇻🇪
2026-04-18 19:30 UTC
Rayo Zuliano vs. Metropolitanos FC
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Metropolitanos FC 0:1
#RayoZuliano#MetropolitanosFC
#Football#VenezuelaPrimeraDivisión
Insólito momento en el partido entre Rayo Zuliano y Athletico Paranaense por Copa Sudamericana.
Apenas salieron los equipos al campo de juego, el venezolano Elvis Martínez se dio cuenta de que el brasileño Cuca lleva la misma remera.
@Fut_planet⚜️#Sudamericana🌎#RayoZuliano🇻🇪#Paranaense🇧🇷
Venezuela Primera División🇻🇪
2026-04-04 19:30 UTC
Rayo Zuliano vs. Trujillanos FC
Predicted outcome: Rayo Zuliano✅
Predicted score: 2:1
Actual: Rayo Zuliano 3:1
#RayoZuliano#TrujillanosFC
2026-04-04 21:30 UTC
Zamora FC vs. Monagas SC
Predicted outcome: Zamora FC✅
Predicted score: 2:1
Actual: Zamora FC 2:1
#ZamoraFC#MonagasSC
2026-04-04 23:30 UTC
Puerto Cabello vs. Deportivo Tachira FC
Predicted outcome: Puerto Cabello❌
Predicted score: 1:0
Actual: Deportivo Tachira FC 1:2
#PuertoCabello#DeportivoTachiraFC
#Football#VenezuelaPrimeraDivisión
Venezuela Primera División🇻🇪
2026-03-22 20:30 UTC
Trujillanos FC vs. Zamora FC
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Zamora FC 0:3
#TrujillanosFC#ZamoraFC
2026-03-22 21:30 UTC
Deportivo Tachira FC vs. Estudiantes de Merida FC
Predicted outcome: Deportivo Tachira FC✅
Predicted score: 2:1
Actual: Deportivo Tachira FC 1:0
#DeportivoTachiraFC#EstudiantesdeMeridaFC
2026-03-22 22:30 UTC
Portuguesa FC vs. Rayo Zuliano
Predicted outcome: Portuguesa FC❌
Predicted score: 2:1
Actual: Draw 1:1
#PortuguesaFC#RayoZuliano
2026-03-22 23:30 UTC
Monagas SC vs. Caracas FC
Predicted outcome: Draw✅
Predicted score: 2:2
Actual: Draw 1:1
#MonagasSC#CaracasFC
#Football#VenezuelaPrimeraDivisión
Venezuela Primera División🇻🇪
2026-04-25 21:00 UTC
Deportivo Tachira FC vs. Carabobo FC
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Deportivo Tachira FC 2:1
#DeportivoTachiraFC#CaraboboFC
2026-04-25 21:00 UTC
Caracas FC vs. Rayo Zuliano
Predicted outcome: Caracas FC✅
Predicted score: 2:1
Actual: Caracas FC 2:1
#CaracasFC#RayoZuliano
2026-04-25 21:00 UTC
Monagas SC vs. Puerto Cabello
Predicted outcome: Monagas SC❌
Predicted score: 1:0
Actual: Draw 1:1
#MonagasSC#PuertoCabello
2026-04-25 21:00 UTC
Portuguesa FC vs. UCV
Predicted outcome: Draw❌
Predicted score: 2:2
Actual: Portuguesa FC 3:0
#PortuguesaFC#UCV
2026-04-25 21:00 UTC
Academia Anzoátegui vs. Zamora FC
Predicted outcome: Zamora FC❌
Predicted score: 0:1
Actual: Draw 1:1
#AcademiaAnzoátegui#ZamoraFC
2026-04-25 21:30 UTC
Trujillanos FC vs. Deportivo La Guaira
Predicted outcome: Deportivo La Guaira✅
Predicted score: 0:2
Actual: Deportivo La Guaira 0:1
#TrujillanosFC#DeportivoLaGuaira
2026-04-26 22:00 UTC
Metropolitanos FC vs. Estudiantes de Merida FC
Predicted outcome: Metropolitanos FC✅
Predicted score: 2:1
Actual: Metropolitanos FC 2:0
#MetropolitanosFC#EstudiantesdeMeridaFC
#Football#VenezuelaPrimeraDivisión