प्रलेखन
यहां आप पा सकते हैं कि PyQGIS API के तहत नया क्या है और क्या है ।
Python2 को Python3 में पोर्ट करने के तरीके के बारे में विवरण प्राप्त करने के लिए वहां जाएं
आप इस प्रश्न पर QGIS2 से QGIS3 तक परीक्षण के बारे में कुछ विवरण पा सकते हैं: QGIS प्लगइन्स के लिए स्वचालित परीक्षण लिखना?
और आपको यहां माइग्रेशन टूल के बारे में एक दिलचस्प ओपनगिस.च पेपर मिल जाएगा ।
मेरे कोड में क्या परिवर्तन होगा
वास्तव में, आपको प्लगइन के कोड को बदलने की आवश्यकता है जो एक नए संस्करण से गुजरने के लिए तैयार नहीं हैं।
आपको qgis.utils.QGis.QGIS_VERSION_INT फ़ंक्शन मिलता है जो QGI संस्करण की जाँच करने के लिए बनाया गया है। यह तब उपयोगी होता है जब कोई फ़ंक्शन डिप्रेसेबल होता है। उदाहरण के लिए setSelectedFeatures
2.16 के बाद से।
if
कथन के उपयोग से छूट देकर:
if qgis.utils.QGis.QGIS_VERSION_INT < 21600 :
joinLayer.setSelectedFeatures( [ f.id() for f in request ] )
else:
joinLayer.selectByIds( [ f.id() for f in request ] )
यह PyQt
आपके मॉड्यूल के तहत आयात की जाने वाली वस्तु के बारे में समान है । यदि आपको संगतता की आवश्यकता है, तो कीमत को अधिक कोड लाइन (QGIS2 फ़ंक्शन के साथ कोड और QGIS3 फ़ंक्शन के साथ कोड और संस्करण की जांच करने के लिए कोड और नई लाइब्रेरी आयात करने की क्षमता) भी लिखना है।
PyQt पुस्तकालयों के बारे में
PyQt5 PyQt4 के साथ संगत नहीं है; PyQt5 में कई महत्वपूर्ण बदलाव हैं। हालांकि, पुराने कोड को नई लाइब्रेरी में समायोजित करना बहुत मुश्किल नहीं है। मतभेद, दूसरों के बीच, निम्नलिखित हैं:
पायथन मॉड्यूल को पुनर्गठित किया गया है। कुछ मॉड्यूल को हटा दिया गया है (QtScript), दूसरों को सबमॉड्यूल (QtGui, QtWebKK) में विभाजित किया गया है।
नए मॉड्यूल पेश किए गए हैं, जिनमें QtBlu ब्लूटूथ, QtPositioning, या Enginio शामिल हैं।
- PyQt5 केवल नए-स्टाइल सिग्नल और स्लॉट्स हैंडलिग का समर्थन करता है। SIGNAL () या SLOT () के लिए कॉल अब समर्थित नहीं हैं। PyQt5 Qt एपीआई के किसी भी हिस्से का समर्थन नहीं करता है जो Qt v5.0 में पदावनत या अप्रचलित के रूप में चिह्नित हैं।
स्रोत: ( http://zetcode.com/gui/pyqt5/introduction/ )
यहाँ आपके / आयात विवरण से परिवर्तन के कुछ उदाहरण हैं:
PyQt4 के साथ याद रखें कि आपको एपीआई के डॉक पर देखना था:
उदाहरण के लिए
PyQT4 QtCore मॉड्यूल
PyQT4 QtGui मॉड्यूल
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, Qt, QObject, SIGNAL
from PyQt4.QtGui import QAction, QIcon, QDialog, QFormLayout
और PyQt5 के साथ अब आपको उन API के डॉक्टर पर ध्यान देना होगा:
PyQt5 QtCore मॉड्यूल
PyQt5 QtGui मॉड्यूल
ताकि बन:
from PyQt5.QtCore import QSettings, QTranslator, QVersionNumber, QCoreApplication, Qt, QObject, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, QDialog, QFormLayout
ध्यान दें कि :
QtGui मॉड्यूल को सबमॉड्यूल में विभाजित किया गया है। QtGui मॉड्यूल में विंडो एकीकरण प्रणाली, इवेंट हैंडलिंग, 2D ग्राफिक्स, बेसिक इमेजिंग, फोंट और टेक्स्ट के लिए कक्षाएं हैं। इसमें OpenGL और OpenGL ES बाइंडिंग का पूरा सेट शामिल है ( OpenGL के लिए समर्थन देखें )। एप्लिकेशन डेवलपर्स आमतौर पर उच्च स्तर के एपीआई जैसे कि QtWidgets मॉड्यूल में निहित के साथ इसका उपयोग करेंगे।
और PyQt5 केवल नए-शैली के संकेत और स्लॉट हैंडलिग का समर्थन करता है! उपयोग करने के लिए कैसे उपयोग करें , और ईवेंट ऑब्जेक्ट को समझने के लिए इस पृष्ठ पर एक नज़र डालें ।pyqtSignal
connect
e
SIGNAL
इसे संगत बनाएं
तो PyQt4 / PyQt5 (और QGIS2 / QGIS3 के बीच) की अनुकूलता के साथ आपको pyQt5 librarie का उपयोग करने से पहले आयात को छोड़कर प्रयास करने की आवश्यकता है।
try:
from PyQt5.QtCore import QSettings, QTranslator, QVersionNumber, QCoreApplication, Qt, QObject, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, QDialog, QFormLayout
except:
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, Qt, QObject, SIGNAL
from PyQt4.QtGui import QAction, QIcon, QDialog, QFormLayout
और यह मत भूलो कि आपको अपने कोड के तहत कुछ विशिष्ट फ़ंक्शन को भी प्रयास / जोड़कर या यदि कथन में बदलना है।
from PyQt4.QtCore import *
साथ बदलने के लिए हैfrom PyQt4.QtCore import QSomething, QWhatever, QElse
, यह माइग्रेशन स्क्रिप्ट को अंतिम चरण ठीक से करेगा (आवश्यक समायोजन जहां मॉड्यूल बदल गए हैं), इसलिए कोई भी प्रयास-छोड़कर आयात की आवश्यकता नहीं है।