上一节讲到了如何配置PyQGIS开发环境,以及使用Eclipse+PyDev工具进行QGIS开发调试。
前面该说的都已经说了,以后就不废话,直接进入正题了。
摘要
本文将会详细阐述如何使用Python创建QGIS插件。
创建插件
最简单的插件开发工程构建方法,无非是使用Plugin Builder这个插件了。
首先,打开QGIS软件,在菜单栏选择“Plugins -> Manage and Install Plugins”,搜索并添加“Plugin Builder”这个插件。
安装成功后,打开”Plugin Builder”插件的对话框,填写相应的项目信息,如下图。
这里,我将插件命名为“MyPlugin”,当然,你也可以取任何名字,只要填上就行。然后点击“Next”按钮。
接下来弹出的是“About”窗口,你可以填写一些信息。然后继续“Next”。
之后,在出现的窗口中,需要选择插件的类型,以及填写插件在QGIS软件菜单栏显示的名称。类型我选择了默认的“Tool button with dialog”也就是带按钮的窗口。名称我这里依然填写“MyPlugin”。继续点击“Next”。
接下来弹出的窗口表示插件工程需要生成的模板,保持默认就可以了,继续“Next”。
到这里之后,就是填写“Bug tracker”以及“Repository”等信息,这些信息会直接关联到QGIS的插件管理平台。也就说,你的插件发布以后,就会被所有使用QGIS的“Mange and Install Plugins”工具的人看到,并且可以下载使用。“Bug tracker”和“Repository”可以填写以下Github的地址。
- Bug tracker : https://github.com/GeospatialPython/Learn/issues
- Repository : https://github.com/GeospatialPython/Learn/
当然,我们这里的插件只是个示范,所以,把“Flag the plugin as experimental”打上勾。
再次点击“Next”以后,会弹出插件保存的位置对话框。为了跟其他QGIS插件保持一致,笔者推荐使用QGIS插件的标准位置,也就是:
C:\\Users\\<你的用户名>\\.qgis2\\python\\plugins
当然,不使用这个位置也可以,但是就需要使用“QGIS_PLUGINPATH”这个环境变量来指定你的插件位置,否则QGIS软件无法加载该插件。配置方法可以是写入QGIS启动之前的“startup.py”文件里面,也可以在QGIS软件中使用“Settings -> Options -> System -> Environment”进行配置。具体方法在这里就不展开了。
最后,点击“OK”按钮,我们的插件工程就创建好了。
编译插件工程
使用“Plugin Builder”生成的插件工程是直接可用编译生成的。接下来,我们需要使用到“pyrcc4”这个工具来进行工程编译。
“pyrcc4”这个是一个命令行工具,有两种方式可以找到他。第一种方式是直接使用Windows下的命令行工具,如果输入“pyrcc4”,弹出如下图所示的信息,则表示这个工具是可用的。
有些朋友直接使用命令行是不能找到这个工具的,可以通过配置系统PATH环境变量来找到它。或者采用第二种方式,找到QGIS安装目录下的“OSGeo4W.bat”,双击打开它,会弹出一个命令行窗口,同样,在里面输入“pyrcc4”测试是否可用。
在命令行窗口中,我们使用“cd”命令,将当前路径设置到我们的插件工程路径下,具体指令为:
cd C:\\Users\\<你的用户名>\\.qgis2\\python\\plugins
然后使用如下命令编译这个插件的资源。
pyrcc4 -o resources.py resources.qrc
到这里,MyPlugin这个插件就可以在QGIS软件中打开了,只需要重启一下QGIS即可使用它了。
插件UI设计
成功创建并运行了我们的第一个QGIS插件之后,我们再来看看这个插件的UI的设计部分。
在我们新建的这个插件目录下,有一个叫“MyPlugin_dialog_base.ui”的文件,这是一个Qt的UI文件。
如果你装了Qt Designer,你可以直接双击这个文件,就会弹出Qt的UI设计师窗口,使用拖拽的方式设计UI。
如果没有装Qt Designer也没关系,可以使用记事本或者任何文本编辑器打开这个“MyPlugin_dialog_base.ui”文件,这里我使用Atom编辑器,如下图。可以看到,本质上,这是一个XML文件。
为了保持简单,我使用Qt Designer工具,拖拽了一个Label控件到UI窗口中,并写上了一句文字。
如果你使用的是文本编辑器打开的这个UI文件,那么复制下面的代码,替换你的UI文件中的代码,会得到相同的效果。
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MyPluginDialogBase</class>
<widget class="QDialog" name="MyPluginDialogBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>390</width>
<height>282</height>
</rect>
</property>
<property name="windowTitle">
<string>MyPlugin</string>
</property>
<widget class="QDialogButtonBox" name="button_box">
<property name="geometry">
<rect>
<x>30</x>
<y>240</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>100</x>
<y>70</y>
<width>191</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>This is your first QGIS plugin</string>
</property>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>button_box</sender>
<signal>accepted()</signal>
<receiver>MyPluginDialogBase</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>20</x>
<y>20</y>
</hint>
<hint type="destinationlabel">
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_box</sender>
<signal>rejected()</signal>
<receiver>MyPluginDialogBase</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>20</x>
<y>20</y>
</hint>
<hint type="destinationlabel">
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
</connections>
</ui>
保存编辑的UI文件之后,我们需要使用“pyuic4”命令编译它,在刚才的命令行窗口中输入一下命令,并敲回车确认:
pyuic4 -o ui_MyPlugin.py MyPlugin_dialog_base.ui
注意,这个命令中”ui_MyPlugin.py”是输出文件,如果你的插件叫别的名字,例如“testPlugin”,那么这里你就应该填写“ui_testPlugin.py”,加上“ui_”前缀。
如果没有提示错误的话,就是编译成功了。这时,可以使用上一节“PyQGIS – 环境搭建”中的“Plugin Reloader”工具来重载一下插件(这个工具同样从”Manage and Install Plugins”窗口中下载)。
或者你没有这个工具的话,重启一下QGIS效果也是一样的。再次点击“MyPlugin”插件,会看到UI已经变成我们刚才设计的样子了。
可能遇到的问题
1、如果你的插件没有出现在“Plugins”菜单栏下,一方面要检查一下插件的位置是否在QGIS默认插件路径下,也就是:C:\\Users\\<你的用户名>.qgis2\\python\\plugins。另一方面,如果确认一下是否设置了插件位置到“QGIS_PLUGINPATH”变量中。如果确认无误,但还是无法找到插件,那么可以打开“Mange and Install Plugins”窗口,搜索自己的插件名称,如果出现如下图所示,那么就是插件配置过程中出现了错误。那就返回去重新检查下上文所述的步骤是否哪里做错了。
2、要特别注意“pyrcc4”和“pyuic4”这两个工具中 “-o”选项后面跟的第一个参数是输出文件名称,第二个参数才是输入文件名称。并且最后生成的UI文件,一定加上“ui_”前缀,否则QGIS无法正确加载插件。
OK,本节的内容就是这样,谢谢阅读。
暂无评论内容