16.2. 使用PyQGIS创建QGIS插件并解决问题¶
本章主要介绍开发QGIS插件所需的基本信息。将讨论的主题包括:
在哪里可以得到帮助来解决你的PyQGIS问题
如何建立一个开发环境,在代码编辑期间解析PyQGIS和PyQt API名称
如何使用QGIS Python控制台和一些可以在任何地方使用的有用类交互测试代码片段
使用plugin Builder创建基本插件
分析您的第一个基本插件以了解其结构
设置在开发复杂插件时有用的运行时调试环境
16.2.1. Webography–从何处获取API信息和PyQGIS帮助¶
大多数自由软件项目的一个特点是他们的文档是免费的,可以用来学习。由于培训材料,编码手册以及其应用程序编程接口(API)的自动文档, QGIS是记录最好的项目之一。
在这一章中,我们将重点介绍web上的主要资源,以学习如何编写QGIS脚本以及如何解决脚本问题。
16.2.2. PyQGIS教程¶
主要资源是一个社区内容驱动的教程,它对编写QGIS脚本作了一般介绍。您可以在 http://www.qgis.org/en/docs/index.html 上找到此文档。
您必须选择插件的QGIS目标版本,然后选择 PyQGIS Developer Cookbook 链接。如果您对最新的QGIS API感兴趣,则必须选择测试版本或直接转到 http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/ .
如果您的系统需要副本,也可以从 http://docs.qgis.org/<qgis-version>/pdf/ 下载PDF版本。
例如,如果需要2.2版的文档,则必须将浏览器指向 http://docs.qgis.org/2.2/pdf/.
但是,如果您需要正在开发的版本的文档,可以访问 http://docs.qgis.org/testing/pdf/.
打开PDF文档页后,可以选择首选翻译。QGIS偶数版本(仅十进制数字,例如2.2、2.4、2.6等)始终是稳定版本。奇数版本始终是 开发版本(例如,2.3或2.5)。奇怪的版本通常称为测试版本。
16.2.3. API文档¶
API是使用软件程序组件的门。随着程序的发展,API会发生变化,在我们的例子中,影响到所有直接使用它们的插件。
最大的QGIS API更改追加了从1.8版到2.0版的跳转,并将从2.x 到3.x的跳跃,但是从一个版本移动到另一个版本时, 会添加新的API,而其他的API则由于复杂软件的正常开发生命周期而被弃用。 通常,为了启用新功能(例如,在版本2.4中添加的多线程可视化或在版本2.6中添加的更新的图例引擎)或 由于代码重构(请参阅 http://en.wikipedia.org/wiki/Code_refactoring ) 。
因此,根据API的变化和想要将代码集成到哪个QGIS版本中,您应该使用一个或另一个API集, 或者更好地编写可以在多个QGIS版本中执行的代码。
API文档是从QGIS代码自动生成的,可以在 http://qgis.org/api/, 在那里你可以找到你需要的类。
例如,如果您需要了解QGIS 2.8(长期发行版本之一)中的QgsVectorLayer类的公共方法, 则可以参考 http://qgis.org/api/2.8/classQgsVectorLayer.html ,或者对于最新的开发版本, http://qgis.org/api/classQgsVectorLayer.html.
应该提到的是,QGIS主要是用C++编写的,其API文档遵循C++表示法。QGIS类的大多数方法都可用作Python绑定。 发现方法是否导出到Python的方法是在QGIS Python控制台中对其进行测试, 或者在QGIS Python控制台中阅读其类文档,如下一章所述。
16.2.4. QGIS社区、邮件列表和IRC频道¶
开源项目的优势之一是,您可以直接与其他开发人员交谈,并经常与项目的核心开发人员交谈。 QGIS有三种支持开发和问题解决的官方方式。
邮件列表¶
所有官方邮件列表都列在 http://qgis.org/en/site/getinvolved/mailinglists.html 。
从用户的角度来看,有两个非常重要的列表,一个用于开发人员(QGIS核心和插件开发人员), 另一个用于用户。根据您的个人资料,选择一个列表:
开发人员列表:为此,请参阅 http://lists.osgeo.org/mailman/listinfo/qgis-developer
用户列表:有关信息,请参阅 http://lists.osgeo.org/mailman/listinfo/qgis-user
这些列表可以使用在线服务在 http://osgeoorg.1560.x6.nabble.com/Quantum-GIS-f4099105.html , 上阅读和搜索这些列表,在这里你也可以查找其他QGIS子项目的列表或其他几个本地QGIS用户组的邮件列表。
如果找不到最近的本地QGIS用户组,请首先询问用户或开发人员邮件列表,然后根据答案, 尝试创建一个新的QGIS本地组并向社区公布。
IRC通道¶
网络中继聊天( IRC )是从用户和开发人员那里获得实时支持的极好方法。请记住,此帮助始终是自愿的, 答案取决于您的礼貌和连接用户的可用时间。
您可以连接到 http://www.freenode.net 通过 http://webchat.freenode.net/?channels=#qgis. 或者,您可以使用gitter服务通过 https://gitter.im/qgis/QGIS 。
IRC解决问题的理念浓缩在qgis频道发送给您的第一条聊天信息中;它将 不要问,只要问一问,再等一会儿, 看看有没有人回答。请参考 http://osgeo.pastebin.com/ 而不是粘贴超过五行 。
Stack Exchange社区¶
技术社交网络(如Stack Exchange)有一个GIS子项目,可以从 http://gis.stackexchange.com 。在这里, 您可以查找其他用户报告的有关QGIS的问题,以及其他用户或QGIS核心开发人员直接给出的答案。
可以通过查找qgis标记找到有关QGIS的消息,例如 http://gis.stackexchange.com/?tags=qgis 。
分享您的知识并报告问题¶
在Stack Exchange、IRC频道和邮件列表中,您可以积极地支持有您已经解决的问题的其他用户。
支持QGIS项目的一个重要方法,除了为其提供资金外,是报告bug,这些bug与详细的用例和数据打包在一起, 允许其他人复制问题。这将加快错误修复速度。
有两种问题:与QGIS或其核心插件相关的问题(例如:Processing)以及与可以通过Plugin Manager安装的第三方插件有关的问题。
要报告QGIS问题或核心插件问题,您需要在 https://www. OSGeo .org/cgi-bin/ldap_create_user.py 上创建一个 OSGeo 帐户,使用该帐户可以登录到QGIS redmine bug tracker报告问题: http://hub.qgis.org/projects/quantum-gis/issues .
当心!首先查看问题列表,确保您的问题尚未报告。
有关报告QGIS问题的良好指南,请访问:
https://www.qgis.org/en/site/getinvolved/development/bugreporting.html
报告第三方插件问题取决于插件开发人员以及他/她决定在哪里托管bug跟踪器。您可以在插件管理器中找到此信息, 如以下屏幕截图所示,如 图 16.2 。

图 16.2 插件信息¶
如果你正在寻找链接跟踪器,它会在第二个链接中的红色框标记的区域中找到,跟踪器。其他有用的链接可以在标记为红色的区域中找到。 第一个链接指向"homepage"插件,其中描述了插件。第三个链接指向"code repository"插件的。在QGIS插件中央存储库中, 只有当每个插件有一个租约跟踪器和一个代码存储库时,它才被接受。