QGIS에서 파이썬 스크립트 자동 저장


9

파이썬 스크립트를 작성할 때 QGIS는 사용자가 ctrl+S명령 또는으로 주 프로젝트를 저장할 때 저장하지 않습니다 Project->Save. 또한 QGIS를 떠날 때 프로그램은 프로젝트에 저장되지 않은 변경 사항에 대해 경고하고 저장하도록 제안하더라도 Python 스크립트의 저장되지 않은 변경 사항 대해 경고하지 않습니다 .

이 동작을 변경할 수있는 옵션이 있습니까?

종료하면 대화 상자 옵션을 사용하여 프로젝트를 저장하고 실제로 프로젝트를 저장하지만 파이썬 스크립트는 저장하지 않아야합니다. 그것들은 단순히 길을 잃었습니다.


2
좋은 지적, 경고가 좋을 것입니다. 우연히 파이썬 스크립트 변경 사항이 손실 된 프로젝트를 실수로 닫고 저장했을 때 고통스러운 경험을했습니다 ... 솔루션이 없지만 해결책은 사용하는 것입니다 외부 텍스트 편집기 (Atom link 사용하고 있습니다 ). 이렇게하면 변경 사항이 저장되고 Qgis는 이미 열려있을 때도 자동으로 scipt를 다시로드합니다.
ADorsch

3
당신은 당신의 스크립트를 실행하는 경우 파이썬 콘솔 편집기 , 옵션이 있습니다 "실행하기 전에 스크립트를 자동 저장 ' 이 말한대로한다. 이것은 귀하의 질문에 대답하지 않지만 스크립트를 실행할 때 변경 사항을 저장하는 데 도움이 될 수 있습니다.
Joseph

답변:


4

프로젝트를 저장할 때마다 Python 편집기 에서 현재 python 스크립트 를 저장하려면 콘솔에 다음을 입력하십시오.

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

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

이것은 본질적으로 projectSaved () 신호를 파이썬 콘솔 의 saveScriptFile () 함수에 연결합니다.


위의 답변에 근거한 이 게시물의 답변에 대해 Germán Carrillo 에게 감사드립니다 .



편집하다:

모든 스크립트 를 자동으로 저장 하는 한 가지 방법은 QGIS 디렉토리에있는 processing console.py 파일 을 약간 수정하는 것 입니다. 예를 들면 다음과 같습니다.

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

def saveScriptFile(self):함수를 찾아 첫 번째 줄을 바꾸십시오.

tabWidget = self.tabEditorWidget.currentWidget()

다음과 같이하고 모든 것을 들여 쓰기하십시오.

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

다음과 같이 보입니다.

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)

파일을 저장하십시오.

이제 디렉토리에 startup.py 파일 을 만들어야합니다 /.qgis2/python/.이 파일은 QGIS가 시작될 때로드되어 내부에 저장된 코드를 실행합니다. 다음 코드를 포함하십시오 :

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)

파일을 저장하십시오.

QGIS를로드하고 프로젝트를 저장할 때 콘솔 편집기에서 열린 모든 스크립트를 저장해야합니다.


(참고 : 콘솔 편집기에서 열린 스크립트를 반복 할 수는 있지만 아직 찾지 못했습니다. 소스 코드 변경을 피하기 때문에 훨씬 좋고 덜 관용적 인 방법입니다.)


1
답변을 암시하는 멋진 코드. 그러나 이것은 파이썬 편집기에서 현재 파이썬 스크립트 만 저장 하지만 다른 스크립트는 저장되지 않습니다 ... 게다가 QGIS를 닫으면이 동작이 손실됩니다. 여전히 좋은 답변 =)에 대한
찬성 투표

@almerillat-감사합니다, 가능한 방법을 포함하도록 게시물을 수정했습니다 :)
Joseph

1
와우, 인상적. 공백으로 들여 쓰기하고 탭이 아닌 들여 쓰기가있는 한 매력처럼 작동합니다 (실수처럼). 더 나은 솔루션을 사용할 수 없으면 동의합니다. 감사합니다 !
almerillat

@almerillat 환영합니다, 다행입니다! 그렇습니다. 더 나은 해결책이 게시되기를 바랍니다. :)
Joseph
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.