在QGIS中自动保存python脚本


9

编写python脚本时,当用户使用ctrl+S命令或使用来保存其主项目时,QGIS不会保存它们Project->Save。此外,离开QGIS时,该程序不会警告python脚本中未保存的更改即使它警告了项目中未保存的更改并提供了保存它们的警告。

是否可以更改此行为?

我应该补充一点,退出时使用对白选项来保存项目确实确实可以保存项目,而不是python脚本。这些简直就是输了。


2
好一点,有个警告会很高兴,当我不小心关闭并保存了丢失了python脚本更改的项目时,我也经历了痛苦的经历……我没有解决方案,但是我的解决方法是使用外部文本编辑器(我正在使用Atom 链接)。这样可以保存您的更改,即使已经打开,Qgis也会自动重新加载您的密码
。– ADorsch

3
如果您正在Python控制台编辑器中运行脚本,则可以执行一个选项“运行前自动保存脚本”。这不会回答您的问题,但可以帮助您保存在运行脚本时所做的更改。
约瑟夫

Answers:


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()信号连接到python控制台中的saveScriptFile()函数。


感谢赫尔曼·卡里略,他在回答这个帖子中,上面的回答是基于。



编辑:

自动保存所有脚本的一种方法是稍微修改您的处理console.py文件,该文件可以在QGIS目录中找到。例如:

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
很好的代码,暗示了答案。但是,这只会将当前的 python脚本保存在Python编辑器中(如您所说),而不会保存其他脚本...此外,一旦关闭QGIS,此行为就会丢失。仍然为您提供一个很好的答案=)
almerillat

@almerillat-谢谢,我编辑了帖子以包括一种可能的方法:)
Joseph

1
哇好厉害 只要您缩进空格而不是制表符(就像我错误地那样),这就像一种魅力。只要没有更好的解决方案,我就会接受。谢谢 !
almerillat

@almerillat非常欢迎,很高兴它起作用了!是的,希望会发布更好的解决方案:)
约瑟夫(Joseph)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.