Jeśli chcesz zapisać bieżący skrypt Pythona w Edytorze Python za każdym razem, gdy zapisujesz projekt, wpisz następujące polecenie w konsoli:
from PyQt4.QtGui import QDockWidget
def save_project():
consoleWidget = iface.mainWindow().findChild( QDockWidget, 'PythonConsole' )
consoleWidget.console.saveScriptFile()
QgsProject.instance().projectSaved.connect(save_project)
To w zasadzie łączy projectSaved () sygnał do saveScriptFile () funkcji w konsoli Pythona.
Kredyt do Germán Carrillo na jego odpowiedź w tym wątku , w którym powyższa odpowiedź była oparta na.
Edytować:
Jedną z metod automatycznego zapisywania wszystkich skryptów jest nieznaczna modyfikacja pliku console.py przetwarzania , który można znaleźć w katalogu QGIS. Na przykład:
C:/Program Files/QGIS 2.18/apps/qgis/python/console/console.py
Znajdź def saveScriptFile(self):
funkcję i zastąp pierwszy wiersz:
tabWidget = self.tabEditorWidget.currentWidget()
z następującymi i wcięcie wszystkiego po:
for i in range(self.tabEditorWidget.count()):
tabWidget = self.tabEditorWidget.widget(i)
Aby wyglądało to tak:
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)
Zapisz plik.
Teraz musimy utworzyć plik startup.py w twoim /.qgis2/python/
katalogu, ten plik jest ładowany podczas uruchamiania QGIS, aby mógł uruchomić dowolny kod zapisany w nim. Dołącz następujący kod:
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)
Zapisz plik.
Mam nadzieję, że teraz, gdy załadujesz QGIS i zapiszesz projekt, wszystkie otwarte skrypty w edytorze konsoli powinny zostać zapisane.
(Uwaga: jestem pewien, że możesz iterować przez otwarte skrypty w edytorze konsoli, ale jeszcze go nie znalazłem. Byłaby to znacznie lepsza i mniej inwazyjna metoda, ponieważ pozwala uniknąć zmiany kodu źródłowego).