Enregistrez automatiquement les scripts python dans QGIS

9

Lors de l'écriture de scripts python, QGIS ne les enregistre pas lorsque l'utilisateur enregistre son projet principal avec la ctrl+Scommande ou avec Project->Save. De plus, en quittant QGIS, le programme ne met pas en garde contre les modifications non enregistrées dans les scripts python même s'il met en garde contre les modifications non enregistrées du projet et propose de les enregistrer.

Existe-t-il une option pour modifier ce comportement?

Je dois ajouter que l'utilisation de l'option de dialogue pour enregistrer le projet lors de la fermeture enregistre effectivement le projet, mais pas les scripts python. Celles-ci sont tout simplement perdues.

almerillat
la source
2
Bon point, ce serait bien d'avoir un avertissement, j'ai fait ma douloureuse expérience aussi, quand j'ai accidentellement fermé et enregistré le projet, où les modifications du script python ont été perdues ... Je n'ai pas de solution, mais ma solution de contournement est d'utiliser un éditeur de texte externe (j'utilise le lien Atom ). Cela enregistre vos modifications et Qgis rechargera automatiquement votre scipt, même lorsqu'il est déjà ouvert ...
ADorsch
3
Si vous exécutez votre script dans l' éditeur de console Python , il existe une option "Enregistrer automatiquement le script avant de l'exécuter" qui fait comme il est dit. Cela ne répondra pas à votre question mais pourrait vous aider à enregistrer les modifications que vous apportez lors de l'exécution des scripts.
Joseph

Réponses:

4

Si vous souhaitez enregistrer le script python actuel dans l' éditeur Python à chaque fois que vous enregistrez votre projet, tapez ce qui suit dans la console:

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

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

Cela connecte essentiellement le projectSaved () signal au saveScriptFile () fonction de la console python.


Crédit Germán Carrillo pour sa réponse à ce poste où la réponse ci - dessus était basée sur.



Éditer:

Une méthode d'enregistrement automatique de tous les scripts consiste à modifier légèrement votre fichier de traitement console.py qui se trouve dans votre répertoire QGIS. Par exemple:

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

Trouvez la def saveScriptFile(self):fonction et remplacez la première ligne:

tabWidget = self.tabEditorWidget.currentWidget()

avec ce qui suit et tout mettre en retrait après:

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

Pour qu'il ressemble à ceci:

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)

Enregistrez le fichier.

Maintenant, nous devons créer un fichier startup.py dans votre /.qgis2/python/répertoire, ce fichier est chargé au démarrage de QGIS afin qu'il exécute tout code enregistré à l'intérieur. Incluez le code suivant:

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)

Enregistrez le fichier.

Maintenant, espérons-le, lorsque vous chargez QGIS et enregistrez un projet, tous les scripts ouverts dans l'éditeur de console doivent être enregistrés.


(Remarque: je suis certain que vous pouvez parcourir les scripts ouverts dans l'éditeur de console, mais ne l'avez pas encore trouvé. Ce serait une méthode bien meilleure et moins intrusive car elle évite de modifier le code source.)

Joseph
la source
1
Beau code qui laisse présager une réponse. Cependant, cela enregistre uniquement le script python actuel dans l'éditeur Python (comme vous l'avez dit), mais les autres scripts ne sont pas enregistrés ... En outre, ce comportement est perdu une fois la fermeture de QGIS. Vous donne toujours une note positive pour la bonne réponse =)
almerillat
@almerillat - Merci, j'ai édité le message pour inclure une méthode possible :)
Joseph
1
Wow, impressionnant. Cela fonctionne comme un charme tant que vous indentez des espaces et non des tabulations (comme je l'ai fait par erreur). Tant qu'aucune meilleure solution n'est disponible, je l'accepterai. Merci !
almerillat
@almerillat Très bienvenu, content que ça ait marché! Oui, j'espère qu'une meilleure solution sera publiée :)
Joseph