17 编写处理插件⚓︎
取决于你将开发的插件类型,它可能是更好的选择—作为处理算法(或者算法集合)去增加功能。这将在QGIS中提供给更好的集成,额外的功能(它可以运行在处理组件中,如建模或批处理界面运行),和更快的开发时间(处理将花费的很大一部分工作)。
为了分发这些算法,你应该创建一个新的插件,并将它们添加到处理工具箱。该插件应该包含一个算法提供者,它在插件实例化时进行注册。
17.1 从头开始创建⚓︎
从头开始创建一个插件,它包含一个算法提供者,你可以使用插件构造器,按照下列步骤操作:
- 安装
Plugin Builder
插件 - 使用
Plugin Builder
创建一个新的插件。当Plugin Builder
要求你使用模板时,选择“Processing provider”。 - 创建的插件包含一个算法提供者。无论是提供者文件和算法文件都被完全注释,并包含有关如何修改提供者,并添加额外的算法的信息。参考它们以获取更多信息。
17.2 更新插件⚓︎
如果你想添加你现有的插件到“Processing”,你需要添加一些代码。
-
在你的
metadata.txt
,你需要添加一个变量:1
hasProcessingProvider=yes
-
在Python文件中,插件使用
initGui
方法安装,你需要改写这样的例子:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from qgis.core import QgsApplication from .processing_provider import Provider class YourPluginName(): def __init__(self): self.provider = None def initProcessing(self): self.provider = Provider() QgsApplication.processingRegistry().addProvider(self.provider) def initGui(self): self.initProcessing() def unload(self): QgsApplication.processingRegistry().removeProvider(self.provider)
-
你可以创建一个
processing_provider
文件夹,其中包含三个文件-
__init__.py
没有任何东西。这是Python包所必需的。 -
provider.py
这将创建处理提供者并公开你的算法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
from qgis.core import QgsProcessingProvider from .example_processing_algorithm import ExampleProcessingAlgorithm class Provider(QgsProcessingProvider): def loadAlgorithms(self, *args, **kwargs): self.addAlgorithm(ExampleProcessingAlgorithm()) # 在这里添加其他算法 # self.addAlgorithm(MyOtherAlgorithm()) def id(self, *args, **kwargs): """插件的ID,用于标识提供者。 该字符串应该是唯一的,短的,仅字符串,例如“qgis”或“gdal”。此字符串不应被翻译(localised)。 """ return 'yourplugin' def name(self, *args, **kwargs): """插件的人性化名称。 该字符串应尽可能短(例如“Lastools”,而不是"Lastools version 1.0.1 64-bit"),并且需要翻译(localised)。 """ return self.tr('Your plugin') def icon(self): """应该返回用于处理工具箱中提供者的QIcon。 """ return QgsProcessingProvider.icon(self)
example_processing_algorithm.py
,其中包含示例算法文件。复制/粘贴模板文件中的内容,并根据需要更新它。
-
-
现在,你可以在QGIS中重新加载插件,你应该可以在处理工具箱和模型中看到你的示例脚本。