কিউজিআইএস-এ পাইথন স্ক্রিপ্টগুলি স্বয়ংক্রিয়ভাবে সংরক্ষণ করুন


9

পাইথন স্ক্রিপ্টগুলি লেখার সময়, ব্যবহারকারী যখন ctrl+Sকমান্ড বা তার সাহায্যে তার মূল প্রকল্পটি সংরক্ষণ করে তখন কিউজিআইএস সেগুলি সংরক্ষণ করে না Project->Save। এছাড়াও, কিউজিআইএস ছাড়ার সময়, প্রোগ্রামটি পাইথন স্ক্রিপ্টগুলিতে সংরক্ষিত পরিবর্তনগুলি সম্পর্কে সতর্ক করে না এমনকি এমনকি যদি এটি প্রকল্পে সংরক্ষণ না করা পরিবর্তনগুলি সম্পর্কে সতর্ক করে এবং সেগুলি সংরক্ষণের প্রস্তাব দেয়।

এই আচরণ পরিবর্তন করার কোন বিকল্প আছে কি?

আমার যুক্ত করা উচিত যে প্রস্থানটি ছেড়ে দেওয়ার সময় সংলাপ বিকল্পটি ব্যবহার করে প্রকল্পটি সংরক্ষণ করা প্রকৃতপক্ষে প্রকল্পটি সংরক্ষণ করে না, তবে পাইথন স্ক্রিপ্টগুলি নয়। এগুলি কেবল হারিয়ে যায়।


2
ভাল কথা, একটি সতর্কতা পেয়ে ভাল লাগবে, আমি আমার বেদনাদায়ক অভিজ্ঞতাও তৈরি করেছিলাম, যখন আমি দুর্ঘটনাক্রমে প্রকল্পটি বন্ধ করে সংরক্ষণ করি, যেখানে পাইথন স্ক্রিপ্টের পরিবর্তনগুলি হারিয়ে গিয়েছিল ... আমার কোনও সমাধান নেই, তবে আমার কাজটি ব্যবহার করতে হবে একটি বাহ্যিক পাঠ্য সম্পাদক (আমি এটম লিঙ্কটি ব্যবহার করছি )। এটি আপনার পরিবর্তনগুলি সংরক্ষণ করে এবং কিগিস ইতিমধ্যে খোলার পরেও স্বয়ংক্রিয়ভাবে আপনার স্ক্রিপ্টটি পুনরায় লোড করবে ...
অ্যাডোরশ

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)

এই মূলত সংযোগ projectSaved () সংকেত saveScriptFile () পাইথন কনসোলে ফাংশন।


উপরের উত্তর উপর ভিত্তি করে এই পোস্টে তার উত্তরের জন্য জেরমান ক্যারিলো Credit



সম্পাদনা:

স্বয়ংক্রিয়ভাবে সংরক্ষণ করার একটি পদ্ধতি হল সমস্ত স্ক্রিপ্ট সামান্য আপনার প্রক্রিয়াকরণ সংশোধন করতে হয় console.py ফাইলটি আপনার 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)

ফাইলটি সংরক্ষণ করুন।

এখন আমাদের আপনার ডিরেক্টরিতে একটি startup.py ফাইল তৈরি করা দরকার /.qgis2/python/, QGIS শুরু হওয়ার সাথে সাথে এই ফাইলটি লোড হয় যাতে এটি ভিতরে সংরক্ষণিত কোনও কোড চালায়। নিম্নলিখিত কোড অন্তর্ভুক্ত করুন:

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)

ফাইলটি সংরক্ষণ করুন।

এখন, আশা করি, আপনি কিউজিআইএস লোড করবেন এবং একটি প্রকল্প সংরক্ষণ করুন, কনসোল সম্পাদকের সমস্ত খোলা স্ক্রিপ্টগুলি সংরক্ষণ করা উচিত।


(দ্রষ্টব্য: আমি নিশ্চিত যে আপনি কনসোল সম্পাদকটিতে খোলা স্ক্রিপ্টগুলির মাধ্যমে পুনরাবৃত্তি করতে পারেন তবে এটি এখনও খুঁজে পাননি the এটি উত্স কোডটি পরিবর্তন করা এড়ানোর কারণে এটি আরও ভাল এবং কম অনুপ্রবেশমূলক পদ্ধতি হবে))


1
দুর্দান্ত কোড যা উত্তরের দিকে ইঙ্গিত দেয়। যাইহোক, এটি কেবল পাইথন সম্পাদকটিতে বর্তমান পাইথন স্ক্রিপ্টটি সংরক্ষণ করে (যেমন আপনি বলেছিলেন), তবে অন্যান্য স্ক্রিপ্টগুলি সংরক্ষণ করা হয় না ... এ ছাড়া, কিউজিআইএস বন্ধ করার পরে এই আচরণটি হারিয়ে যায়। তবুও আপনাকে সুন্দর উত্তরের জন্য একটি
উত্সাহ প্রদান করছে

@ এলমারিলাত - ধন্যবাদ, আমি একটি সম্ভাব্য পদ্ধতি অন্তর্ভুক্ত করতে পোস্টটি সম্পাদনা করেছি :)
জোসেফ

1
বাহ, চিত্তাকর্ষক। এটি যতক্ষণ না ফাঁকা স্থানগুলিতে এবং ট্যাবগুলিতে নয় (যেমন আমি ভুলভাবে করেছি) ততক্ষণ আকর্ষণীয় কাজ করে। যতক্ষণ না এর চেয়ে ভাল সমাধান না পাওয়া যায় আমি তা গ্রহণ করব accept ধন্যবাদ !
almerillat

@ এলমারিলাত সর্বাধিক স্বাগত, এটি কাজ করে আনন্দিত! হ্যাঁ, আশা করি আরও ভাল সমাধান পোস্ট করা হবে :)
জোসেফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.