स्वचालित रूप से क्यूजीआईएस में अजगर लिपियों को बचाएं


9

अजगर स्क्रिप्ट लिखते समय, QGIS उन्हें सहेजता नहीं है जब उपयोगकर्ता ctrl+Sकमांड के साथ या उसके साथ अपने मुख्य प्रोजेक्ट को बचाता है Project->Save। इसके अलावा, जब QGIS छोड़ते हैं, तो कार्यक्रम अजगर लिपियों में सहेजे गए परिवर्तनों के बारे में चेतावनी नहीं देता है, भले ही यह परियोजना के लिए सहेजे न गए परिवर्तनों के बारे में चेतावनी देता है और उन्हें बचाने की पेशकश करता है।

क्या इस व्यवहार को बदलने का कोई विकल्प है?

मुझे यह जोड़ना चाहिए कि जब छोड़ने के लिए परियोजना को बचाने के लिए संवाद विकल्प का उपयोग करना वास्तव में परियोजना को बचाता है, लेकिन अजगर लिपियों को नहीं। वे बस खो गए हैं।


2
अच्छा बिंदु, एक चेतावनी के लिए अच्छा होगा, मैंने अपना दर्दनाक अनुभव भी किया, जब मैंने गलती से बंद कर दिया और परियोजना को बचा लिया, जहां अजगर स्क्रिप्ट में परिवर्तन खो गए थे ... मेरे पास कोई समाधान नहीं है, लेकिन मेरा वर्कअराउंड उपयोग करना है एक बाहरी पाठ संपादक (मैं एटम लिंक का उपयोग कर रहा हूं )। यह आपके परिवर्तनों को सहेजता है और Qgis स्वचालित रूप से आपकी स्कूटी को फिर से लोड करेगा, यहां तक ​​कि पहले से ही खुला होने पर ...
Adorsch

3
यदि आप अपनी स्क्रिप्ट पाइथन कंसोल एडिटर में चला रहे हैं , तो एक विकल्प है "रनिंग से पहले ऑटो-सेव स्क्रिप्ट" जो जैसा कहता है वैसा करता है। यह आपके प्रश्न का उत्तर नहीं देगा, लेकिन स्क्रिप्ट चलाते समय आपके द्वारा किए गए परिवर्तनों को सहेजने में आपकी मदद कर सकता है।
जोसफ

जवाबों:


4

यदि आप अपनी परियोजना को बचाने के लिए हर बार पायथन संपादक में वर्तमान अजगर स्क्रिप्ट को बचाना चाहते हैं , तो निम्नलिखित को कंसोल में टाइप करें:

from PyQt4.QtGui import QDockWidget
def save_project():
    consoleWidget = iface.mainWindow().findChild( QDockWidget, 'PythonConsole' )
    consoleWidget.console.saveScriptFile()

QgsProject.instance().projectSaved.connect(save_project)

यह अनिवार्य रूप से प्रोजेक्ट कंसोल () सिग्नल को saveScriptFile () फ़ंक्शन से अजगर कंसोल में जोड़ता है।


इस पोस्ट में अपने उत्तर के लिए जर्मेन कारिलो को श्रेय दिया गया है जिसमें उपरोक्त उत्तर आधारित था।



संपादित करें:

सभी स्क्रिप्ट्स को स्वचालित रूप से सहेजने का एक तरीका यह है कि आप अपनी प्रोसेसिंग कंसोलहोम फ़ाइल को थोड़ा संशोधित करें जो आपकी QGIS निर्देशिका में मिल सकती है। उदाहरण के लिए:

C:/Program Files/QGIS 2.18/apps/qgis/python/console/console.py

def saveScriptFile(self):फ़ंक्शन ढूंढें और पहली पंक्ति को बदलें:

tabWidget = self.tabEditorWidget.currentWidget()

निम्नलिखित के साथ और सब कुछ के बाद इंडेंट:

for i in range(self.tabEditorWidget.count()):
    tabWidget = self.tabEditorWidget.widget(i)

ताकि यह ऐसा दिखे:

def saveScriptFile(self):
    for i in range(self.tabEditorWidget.count()):
        tabWidget = self.tabEditorWidget.widget(i)
        try:
            tabWidget.save()
        except (IOError, OSError) as error:
            msgText = QCoreApplication.translate('PythonConsole',
                                                 'The file <b>{0}</b> could not be saved. Error: {1}').format(tabWidget.path,
                                                                                                              error.strerror)
            self.callWidgetMessageBarEditor(msgText, 2, False)

फ़ाइल सहेजें।

अब हमें आपकी निर्देशिका में एक स्टार्टअप-थ्रू फ़ाइल बनाने की आवश्यकता है /.qgis2/python/, क्यूजीआईएस शुरू होने पर यह फ़ाइल लोड हो जाती है, इसलिए यह अंदर सहेजे गए किसी भी कोड को चलाएगा। निम्नलिखित कोड शामिल करें:

from qgis.core import QgsProject
from qgis.utils import iface
from PyQt4.QtGui import QDockWidget
def save_project():
    consoleWidget = iface.mainWindow().findChild( QDockWidget, 'PythonConsole' )
    consoleWidget.console.saveScriptFile()

QgsProject.instance().projectSaved.connect(save_project)

फ़ाइल सहेजें।

अब, उम्मीद है, जब आप QGIS लोड करते हैं और किसी प्रोजेक्ट को सहेजते हैं, तो कंसोल एडिटर में सभी खोली गई स्क्रिप्ट को सहेजा जाना चाहिए।


(नोट: मुझे पूरा यकीन है कि आप कंसोल एडिटर में खोली गई स्क्रिप्ट्स के माध्यम से पुनरावृति कर सकते हैं लेकिन अभी तक यह नहीं मिला है। यह बहुत बेहतर और कम दखल देने वाला तरीका होगा क्योंकि यह स्रोत कोड को बदलने से बचता है।)


1
अच्छा कोड जो एक उत्तर की ओर संकेत करता है। हालाँकि, यह केवल पायथन संपादक में वर्तमान अजगर स्क्रिप्ट को बचाता है (जैसा कि आपने कहा), लेकिन अन्य स्क्रिप्ट सहेजे नहीं जाते हैं ... इसके अलावा, यह व्यवहार QGIS को बंद करने के बाद खो जाता है। फिर भी आपको अच्छे उत्तर के लिए
उत्थान

@almerillat - धन्यवाद, मैंने एक संभावित विधि को शामिल करने के लिए पोस्ट को संपादित किया है :)
जोसेफ

1
वाह, प्रभावशाली। यह एक आकर्षण की तरह काम करता है जब तक आप रिक्त स्थान के साथ इंडेंट करते हैं और टैब नहीं करते हैं (जैसा कि मैंने गलती से किया था)। जब तक कोई बेहतर उपाय उपलब्ध नहीं होता है, मैं इसे स्वीकार करता हूं। धन्यवाद !
अलमेरिल

@almerillat सबसे स्वागत है, खुशी है कि यह काम किया! हां, उम्मीद है कि एक बेहतर समाधान :) पोस्ट किया जाएगा
जोसेफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.