Speichern Sie Python-Skripte automatisch in QGIS

9

Beim Schreiben von Python-Skripten speichert QGIS diese nicht, wenn der Benutzer sein Hauptprojekt mit dem ctrl+SBefehl oder mit speichert Project->Save. Außerdem warnt das Programm beim Verlassen von QGIS nicht vor nicht gespeicherten Änderungen in Python-Skripten, selbst wenn es vor nicht gespeicherten Änderungen am Projekt warnt und anbietet, diese zu speichern.

Gibt es eine Option, um dieses Verhalten zu ändern?

Ich sollte hinzufügen, dass die Verwendung der Dialogoption zum Speichern des Projekts beim Beenden zwar das Projekt speichert, nicht jedoch die Python-Skripte. Die sind einfach verloren.

Almerillat
quelle
2
Guter Punkt, wäre schön, eine Warnung zu haben. Ich habe auch meine schmerzhafte Erfahrung gemacht, als ich versehentlich das Projekt geschlossen und gespeichert habe, in dem die Änderungen am Python-Skript verloren gegangen sind. Ich habe keine Lösung, aber meine Problemumgehung besteht darin, sie zu verwenden ein externer Texteditor (ich benutze Atom Link ). Dies speichert Ihre Änderungen und Qgis lädt Ihren Scipt automatisch neu, auch wenn er bereits geöffnet ist ...
ADorsch
3
Wenn Sie Ihr Skript im Python-Konsolen-Editor ausführen , gibt es die Option "Skript vor dem Ausführen automatisch speichern", die den Anweisungen entspricht. Dies beantwortet Ihre Frage nicht, kann Ihnen jedoch dabei helfen, die Änderungen zu speichern, die Sie beim Ausführen der Skripte vornehmen.
Joseph

Antworten:

4

Wenn Sie das aktuelle Python-Skript bei jedem Speichern Ihres Projekts im Python-Editor speichern möchten, geben Sie Folgendes in die Konsole ein:

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

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

Dies verbindet im Wesentlichen das projectSaved () -Signal mit der Funktion saveScriptFile () in der Python-Konsole.


Dank an Germán Carrillo für seine Antwort in diesem Beitrag, auf dem die obige Antwort basiert.



Bearbeiten:

Eine Methode zum automatischen Speichern aller Skripte besteht darin, die Verarbeitungsdatei console.py , die sich in Ihrem QGIS-Verzeichnis befindet, geringfügig zu ändern . Beispielsweise:

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

Suchen Sie die def saveScriptFile(self):Funktion und ersetzen Sie die erste Zeile:

tabWidget = self.tabEditorWidget.currentWidget()

mit folgendem und alles danach einrücken:

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

Damit es so aussieht:

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)

Speicher die Datei.

Jetzt müssen wir eine Startup.py- Datei in Ihrem /.qgis2/python/Verzeichnis erstellen. Diese Datei wird beim Start von QGIS geladen, damit der darin gespeicherte Code ausgeführt wird. Fügen Sie den folgenden Code ein:

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)

Speicher die Datei.

Wenn Sie jetzt QGIS laden und ein Projekt speichern, sollten hoffentlich alle geöffneten Skripte im Konsoleneditor gespeichert werden.


(Hinweis: Ich bin mir ziemlich sicher, dass Sie die geöffneten Skripte im Konsoleneditor durchlaufen können, sie aber noch nicht gefunden haben. Dies wäre eine viel bessere und weniger aufdringliche Methode, da dadurch das Ändern des Quellcodes vermieden wird.)

Joseph
quelle
1
Netter Code, der auf eine Antwort hinweist. Dadurch wird jedoch nur das aktuelle Python-Skript im Python-Editor gespeichert (wie Sie sagten), andere Skripte werden jedoch nicht gespeichert. Außerdem geht dieses Verhalten beim Schließen von QGIS verloren. Ich gebe dir immer noch eine positive Bewertung für die nette Antwort =)
Almerillat
@ Almerillat - Danke, ich habe den Beitrag so bearbeitet, dass er eine mögliche Methode enthält :)
Joseph
1
Wow beeindruckend. Dies funktioniert wie ein Zauber, solange Sie Leerzeichen und keine Tabulatoren einrücken (wie ich es fälschlicherweise getan habe). Solange keine bessere Lösung verfügbar ist, werde ich sie akzeptieren. Vielen Dank !
Almerillat
@ Almerillat Herzlich willkommen, froh, dass es funktioniert hat! Ja, hoffentlich wird eine bessere Lösung veröffentlicht :)
Joseph