PyQt4 और PySide दोनों में Qt API के समान मैपिंग हैं। हालाँकि, कुछ अंतर हैं, जिन पर मेरी राय नीचे वर्णित है:
रखरखाव
वे दोनों अच्छी तरह से बनाए हुए हैं। PySide इस समय बहुत अधिक नियमित रिलीज़ का उत्पादन करता है: मुझे लगता है कि यह PyQt4 की तुलना में Qt से अधिक निकटता से जुड़ा हुआ है और एक नए प्रोजेक्ट के रूप में इस समय एक अधिक सक्रिय समुदाय है। हालाँकि, यह सिर्फ मेरी धारणा है और यह गलत हो सकता है।
PyQt4 में व्यावसायिक सहायता का विकल्प उपलब्ध है (मुझे नहीं पता कि यह PySide के लिए सही है या नहीं)।
लाइसेंस
PyQt4 या तो एक वाणिज्यिक लाइसेंस या GPL के तहत जारी किया जाता है ; PySide को LGPL के तहत जारी किया गया है । वाणिज्यिक अनुप्रयोगों के लिए, यह एक महत्वपूर्ण अंतर है।
एपीआई और पायथन संस्करण
PyQt4 दो अलग-अलग एपीआई का समर्थन करता है। एपीआई संस्करण 1 अजगर 2 x अनुप्रयोगों के लिए डिफ़ॉल्ट है और एपीआई संस्करण 2 अजगर 3.x अनुप्रयोगों के लिए डिफ़ॉल्ट है।
PySide केवल एक API का समर्थन करता है, जो PyQt4 के API संस्करण के लगभग बराबर है। API संस्करण 2 (या PySide API) PyQt4 के API संस्करण के साथ काम करने के लिए बहुत अच्छा है। API संस्करण 1 में आपके पास बहुत से कोड हैं जो अजगर को जोड़ते हैं। QtCore.QString
फिर से एस और वापस करने के लिए तार । API संस्करण 2 (और PySide) में आप सिर्फ अजगर स्ट्रिंग्स का उपयोग करते हैं। यदि आप दोनों के साथ खेलना चाहते हैं, तो PyQt4 और PySide के बीच स्विच करने का एक सरल तरीका देखें।
मेरे द्वारा लिखा गया अधिकांश कोड PyQt4 और PySide में समान रूप से अच्छा काम करता है। ऐतिहासिक रूप से, मैंने पायथन GUI के लिए हमेशा PyQt4 का उपयोग किया था लेकिन अब जो सबसे नया सामान लिखता हूं वह PySide (मुख्यतः अधिक लचीली लाइसेंसिंग के कारण) का उपयोग करता है। मैं निश्चित रूप से आपको दोनों की कोशिश करने की सलाह दूंगा और देखूंगा कि आप उन्हें कैसे ढूंढते हैं। यदि आप QtVariant.py (नीचे) का उपयोग करते हैं, तो उनके बीच स्विच करना तुच्छ है और जब आप कोई निर्णय लेते हैं तो केवल एक फ़ाइल होगी जिसे अपडेट करने की आवश्यकता है।
प्रलेखन
PyQt4 और PySide दोनों के लिए प्रलेखन मुख्य Qt प्रलेखन से ऑटो-जनरेट किया गया है । मेरी राय में, PySide प्रलेखन एक बेहतर प्रतिनिधित्व है कि आप वास्तव में क्या उपयोग करते हैं, लेकिन व्यवहार में मैं बस वैसे भी Qt प्रलेखन का उपयोग करता हूं (यह सी ++ प्रलेखन को मानसिक रूप से अनुवाद करने के लिए काफी आसान है)।
बाहरी पुस्तकालय
यदि आप बाहरी पुस्तकालयों का उपयोग कर रहे हैं, तो कुछ अभी तक PySide के साथ काम नहीं करते हैं। बहुत से ऐसे नहीं हैं जिन्हें आपको ईमानदार होने के लिए PySide के साथ काम करने की आवश्यकता है, लेकिन कुछ साल पहले मैंने कुछ कोड लिखे थे जो मुड़ (Qt रिएक्टर के साथ) और matplotlib का उपयोग करते थे और जिसने मुझे PySide के बजाय PyQtl का उपयोग करने के लिए मजबूर किया। । मुझे लगता है कि यह संभावना है कि इन पुस्तकालयों को अब तक दोनों का समर्थन करने के लिए अद्यतन किया गया होगा, लेकिन मैंने जांच नहीं की है।
PyQt4 या PySide के साथ कोड काम करना
मान लें कि आप python 2.x का उपयोग कर रहे हैं, तो आप QtVariant.py बनाकर और उसका उपयोग करके अपने कोड को PySide और PyQt4 दोनों के साथ आसानी से संगत बना सकते हैं:
from QtVariant import QtGui, QtCore
जो कुछ भी। मेरे द्वारा उपयोग किया जाने वाला QtVariant.py
import sys
import os
default_variant = 'PySide'
env_api = os.environ.get('QT_API', 'pyqt')
if '--pyside' in sys.argv:
variant = 'PySide'
elif '--pyqt4' in sys.argv:
variant = 'PyQt4'
elif env_api == 'pyside':
variant = 'PySide'
elif env_api == 'pyqt':
variant = 'PyQt4'
else:
variant = default_variant
if variant == 'PySide':
from PySide import QtGui, QtCore
# This will be passed on to new versions of matplotlib
os.environ['QT_API'] = 'pyside'
def QtLoadUI(uifile):
from PySide import QtUiTools
loader = QtUiTools.QUiLoader()
uif = QtCore.QFile(uifile)
uif.open(QtCore.QFile.ReadOnly)
result = loader.load(uif)
uif.close()
return result
elif variant == 'PyQt4':
import sip
api2_classes = [
'QData', 'QDateTime', 'QString', 'QTextStream',
'QTime', 'QUrl', 'QVariant',
]
for cl in api2_classes:
sip.setapi(cl, 2)
from PyQt4 import QtGui, QtCore
QtCore.Signal = QtCore.pyqtSignal
QtCore.QString = str
os.environ['QT_API'] = 'pyqt'
def QtLoadUI(uifile):
from PyQt4 import uic
return uic.loadUi(uifile)
else:
raise ImportError("Python Variant not specified")
__all__ = [QtGui, QtCore, QtLoadUI, variant]