プロジェクトを保存するたびに現在のPythonスクリプトをPython Editorに保存する場合は、コンソールに次のように入力します。
from PyQt4.QtGui import QDockWidget
def save_project():
consoleWidget = iface.mainWindow().findChild( QDockWidget, 'PythonConsole' )
consoleWidget.console.saveScriptFile()
QgsProject.instance().projectSaved.connect(save_project)
これは基本的に、projectSaved()信号をPythonコンソールのsaveScriptFile()関数に接続します。
上記の回答の根拠となったこの投稿での彼の回答はGermánCarrilloの功績によるものです。
編集:
すべてのスクリプトを自動的に保存する 1つの方法は、QGISディレクトリにある処理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をロードしてプロジェクトを保存するときに、コンソールエディターで開いているすべてのスクリプトを保存する必要があります。
(注:コンソールエディターで開いているスクリプトを繰り返し処理できることは確かですが、まだ見つかりません。これは、ソースコードの変更を回避できるので、はるかに優れた、煩わしくない方法です。)