Для тех кто пишет расширения на 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
El Napoli anunció 2 fichajazos el día de hoy!
El lateral izquierdo Leonardo Spinazzola es nuevo jugador del Napoli procedente de la Roma.
El defensa español Rafa Marín es nuevo jugador del Napoli procedente del Real Madrid.
@Fut_Planet⚜️#Napoli🇮🇹
#Italia#Referendum2026
Dati parziali, a #Napoli affluenza al 38,50%, meglio delle europee. E nei quartieri ricchi si raggiunge anche il 58%.
@OsservatorioItaliano
#Italia#Campania
Il governatore campano Vincenzo #DeLuca (#PD|S&D) e i sindaci campani a lui vicini, in primis il sindaco di Salerno Vincenzo #Napoli (PD), si sono rifiutati di firmare l'appello dei sindaci.
@UltimoraPolitics
Italy Serie A🇮🇹
2026-05-11 18:45 UTC
Napoli vs. Bologna
Predicted outcome: Napoli❌
Predicted score: 2:1
Actual: Bologna 2:3
#Napoli#Bologna
#Football#ItalySerieA
Italy Serie A🇮🇹
2026-04-24 18:45 UTC
Napoli vs. Cremonese
Predicted outcome: Napoli✅
Predicted score: 2:1
Actual: Napoli 4:0
#Napoli#Cremonese
#Football#ItalySerieA
#Napoli’s sporting director Giovanni #Manna: “There are no doubts. Rasmus #Hojlund will stay here. We have an obligation to buy (€44M) from #ManUnited, if Napoli arrive to qualify for Champions League 26/27, but he is in our plans despite this condition”.
[Nicolo Schira]
📥@Manchester_Utdfc
“La prima cosa che Dio fa davanti al #dolore non è spiegare, ma condividere. Non offre una teoria, ma una vicinanza”. Lo ha detto, oggi pomeriggio, mons. Francesco Marino, Vescovo di #Nola, celebrando nella Cattedrale i funerali del piccolo #Domenico Caliendo, il bimbo di due anni morto dopo un trapianto di cuore all'ospedale Monaldi di #Napoli. Alla celebrazione è presente anche la Premier Meloni.
Richiamando il passo del Vangelo della vedova di Nain, il presule ha ricordato che Gesù vedendo quella madre “fu preso da grande compassione. Gesù si avvicina, tocca la bara, entra nella scena della morte, non scappa, ci chiede di non piangere, ma di fidarci di lui. Oggi possiamo credere che Gesù si è avvicinato anche al letto di ospedale, alla sala operatoria, alle ore cariche di attesa e di paura. Era lì, nel silenzio dei corridoi, nel battito fragile di quel piccolo cuore. E quando quel cuore si è fermato, l’amore di Dio non si è fermato”.
Con le parole del Salmo 34, “Il Signore è vicino a chi ha il cuore spezzato”, mons. Marino ha aggiunto: “Oggi questa Parola è vera in modo particolare per voi genitori, per la vostra famiglia, per tutti noi. Dio, che è Padre, è vicino nel pianto, nella stanchezza, nelle domande che ci gridano dentro: ‘Perché?’. Lui solo può comandarci: ‘Non piangere!’”.
Anche il profeta Isaia, nella prima lettura, consegna una promessa: “Il Signore asciugherà le lacrime su ogni volto”. “Non dice che oggi non piangeremo. Dice che le nostre lacrime non sono l’ultima parola. C’è un giorno preparato da Dio in cui la morte sarà vinta definitivamente”, ha commentato il vescovo. E richiamandosi all’apostolo Paolo nella seconda lettura, il vescovo ha osservato: “Noi siamo tristi, sì. Profondamente. Ma non siamo senza speranza. Perché Gesù, toccando ora questa piccola bara bianca, come quel giorno il feretro a Nain, ci restituisce nella dolce speranza Domenico, come restituì quel figlio a sua madre. Ce lo restituisce già in maniera nuova, ma non meno reale; non in quel corpicino, ma in una memoria viva che nel tempo abbiamo il dovere di custodire e raccontare negli anni che verranno; proprio come tu, cara mamma Patrizia, con tutte le tue forze, ci stai gridando nel tuo esemplare e composto dolore”.
“L’evangelista - prosegue mons. Marino - conclude il racconto dicendo che il ragazzo si mise seduto e cominciò a parlare. Sì, anche Domenico ci parla ancora! Anche lui come i Santi Innocenti martiri della strage di Erode, ci lascia un messaggio che ricorderemo per sempre. Senza poter parlare, oggi ci canta quella bellezza collaterale alla tragedia che ci ha frastornati”.
“Il vostro bambino Domenico in queste lunghe e atroci settimane è diventato un po’ figlio di tutti noi; e se è vero che i figli sono ‘pezzi di cuore’, anche quello di ciascuno di noi, come quello vostro di mamma e di papà, si è spezzato nel dolore di questa assurda tragedia”, ha proseguito il Vescovo. (1/2)