Salva automaticamente gli script Python in QGIS


9

Quando si scrivono script Python, QGIS non li salva quando l'utente salva il suo progetto principale con il ctrl+Scomando o con Project->Save. Inoltre, quando si lascia QGIS, il programma non avvisa delle modifiche non salvate negli script Python anche se avverte delle modifiche non salvate al progetto e si offre di salvarle.

C'è qualche opzione per cambiare questo comportamento?

Dovrei aggiungere che usando l'opzione dialog per salvare il progetto quando si esce, si salva il progetto, ma non gli script Python. Quelli sono semplicemente persi.


2
Bene, sarebbe bello avere un avvertimento, ho anche fatto la mia esperienza dolorosa, quando ho chiuso accidentalmente e salvato il progetto, dove sono state perse le modifiche allo script Python ... Non ho una soluzione, ma la mia soluzione è quella di usare un editor di testo esterno (sto usando Atom link ). Ciò consente di risparmiare le modifiche e Qgis ricaricherà automaticamente lo scipt, anche quando già aperto ...
ADorsch

3
Se stai eseguendo il tuo script in Python Console Editor , c'è un'opzione "Salva automaticamente lo script prima di eseguirlo" che fa come dice. Questo non risponderà alla tua domanda ma potrebbe aiutarti a salvare le modifiche apportate durante l'esecuzione degli script.
Joseph

Risposte:


4

Se si desidera salvare lo script python corrente nell'editor Python ogni volta che si salva il progetto, digitare quanto segue nella console:

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

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

Questo collega essenzialmente projectSaved () segnale al saveScriptFile () funzione nella console pitone.


Ringraziamo Germán Carrillo per la sua risposta in questo post in cui si basava la risposta di cui sopra.



Modificare:

Un metodo per salvare automaticamente tutti gli script è modificare leggermente il file di elaborazione console.py che si trova nella directory di QGIS. Per esempio:

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

Trova la def saveScriptFile(self):funzione e sostituisci la prima riga:

tabWidget = self.tabEditorWidget.currentWidget()

con il seguente e rientro tutto dopo:

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

In modo che assomigli a:

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)

Salva il file.

Ora abbiamo bisogno di creare un file startup.py nella tua /.qgis2/python/directory, questo file viene caricato all'avvio di QGIS, quindi eseguirà qualsiasi codice salvato all'interno. Includi il seguente codice:

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)

Salva il file.

Ora, si spera, quando carichi QGIS e salvi un progetto, tutti gli script aperti nell'editor della console dovrebbero essere salvati.


(Nota: sono abbastanza sicuro che puoi scorrere gli script aperti nell'editor della console ma non l'ho ancora trovato. Questo sarebbe un metodo molto migliore e meno invadente in quanto evita di alterare il codice sorgente.)


1
Bel codice che suggerisce una risposta. Tuttavia, questo salva solo l' attuale script Python nell'editor Python (come hai detto), ma altri script non vengono salvati ... Inoltre, questo comportamento si perde una volta chiuso QGIS. Ti
sto

@almerillat - Grazie, ho modificato il post per includere un possibile metodo :)
Joseph

1
Wow, impressionante. Funziona come un incantesimo fintanto che rientri con spazi e non tabulazioni (come ho fatto per errore). Finché non sarà disponibile una soluzione migliore, la accetterò. Grazie !
Almerillat,

@almerillat Molto gradito, felice che abbia funzionato! Sì, speriamo che venga pubblicata una soluzione migliore :)
Joseph
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.