Guarde automáticamente los scripts de Python en QGIS

9

Al escribir scripts de python, QGIS no los guarda cuando el usuario guarda su proyecto principal con el ctrl+Scomando o con Project->Save. Además, al salir de QGIS, el programa no advierte sobre cambios no guardados en los scripts de Python, incluso si advierte sobre cambios no guardados en el proyecto y ofrece guardarlos.

¿Hay alguna opción para cambiar este comportamiento?

Debo agregar que usar la opción de diálogo para guardar el proyecto cuando salga, de hecho, guarda el proyecto, pero no los scripts de Python. Esos simplemente están perdidos.

almerillat
fuente
2
Buen punto, sería bueno tener una advertencia, también hice mi experiencia dolorosa, cuando accidentalmente cerré y guardé el proyecto, donde se perdieron los cambios en el script de Python ... No tengo una solución, pero mi solución es usar un editor de texto externo (estoy usando el enlace Atom ). Esto guarda sus cambios y Qgis recargará automáticamente su scipt, incluso cuando ya
esté
3
Si está ejecutando su secuencia de comandos en el Editor de la consola de Python , hay una opción "Guardar automáticamente la secuencia de comandos antes de ejecutar", que hace lo que dice. Esto no responderá a su pregunta, pero podría ayudarlo a guardar los cambios que realice al ejecutar los scripts.
Joseph

Respuestas:

4

Si desea guardar el script actual de Python en el Editor de Python cada vez que guarde su proyecto, escriba lo siguiente en la consola:

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

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

Esto conecta esencialmente el projectSaved () señal a la saveScriptFile () función en la consola Python.


Gracias a Germán Carrillo por su respuesta en esta publicación en la que se basó la respuesta anterior.



Editar:

Un método para guardar automáticamente todos los scripts es modificar ligeramente su archivo de consola console.py de procesamiento que se puede encontrar en su directorio QGIS. Por ejemplo:

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

Encuentra la def saveScriptFile(self):función y reemplaza la primera línea:

tabWidget = self.tabEditorWidget.currentWidget()

con lo siguiente y sangra todo después:

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

Para que se vea así:

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)

Guarda el archivo.

Ahora necesitamos crear un archivo startup.py en su /.qgis2/python/directorio, este archivo se carga cuando QGIS se inicia para que ejecute cualquier código guardado en su interior. Incluya el siguiente código:

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)

Guarda el archivo.

Ahora, con suerte, cuando carga QGIS y guarda un proyecto, se deben guardar todos los scripts abiertos en el editor de la consola.


(Nota: estoy bastante seguro de que puede iterar a través de los scripts abiertos en el editor de la consola, pero aún no lo ha encontrado. Este sería un método mucho mejor y menos intrusivo ya que evita alterar el código fuente).

José
fuente
1
Buen código que sugiere una respuesta. Sin embargo, esto solo guarda la secuencia de comandos de Python actual en el Editor de Python (como usted dijo), pero otras secuencias de comandos no se guardan ... Además, este comportamiento se pierde una vez que cierra QGIS. Todavía te doy un
voto positivo
@almerillat - Gracias, he editado la publicación para incluir un posible método :)
Joseph
1
Wow impresionante. Esto funciona de maravilla siempre que sangres con espacios y no con pestañas (como lo hice por error). Mientras no haya una mejor solución disponible, la aceptaré. Gracias !
almerillat
@almerillat Muy bienvenido, me alegro de que funcionó! Sí, espero que se publique una mejor solución :)
Joseph