PyQGIS开发 — 创建第一个插件

上一节讲到了如何配置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的地址。

当然,我们这里的插件只是个示范,所以,把“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,本节的内容就是这样,谢谢阅读。

© 版权声明
THE END
喜欢就支持一下吧
点赞104 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容