Writing a QGIS plugin is not overly complicated but represents a bit of work. Using
git in conjunction with your development efforts can make sure your investment in
coding time is preserved.
Development Tools
The QGIS project team has set up a central location for plugin development which includes pretty much everything you need to develop and support your plugins, including:
- Issue tracking
- Wiki
- Documents
- Repository
The repository feature allows you to create a central place to store your plugin code using git. Others can clone your repository and contribute through patches or pull requests.
Creating a Plugin
The chore of setting up the boilerplate for a plugin is made simple by using the Plugin Builder. Previously this was a web application but it has now been replaced by a QGIS plugin aptly named Plugin Builder. You can install Plugin Builder from within QGIS by selecting Fetch Python Plugins… from the Plugins menu.
Once Plugin Builder is installed you can quickly create a starter plugin that implements a simple dialog box with OK and Cancel buttons. The plugin created by Plugin Builder is fully functional—it will load in QGIS but not do anything useful until you customize it.
Setting up the Workflow
You have a couple of options for setting up your development directory and workflow:
- Copy your plugin template to the QGIS plugin directory, initialize the git repository, and develop from there.
- Work within your plugin template directory that was created by Plugin Builder (not within the QGIS plugin directory)
Option one is very convenient as long as you don’t test the uninstall feature of your plugin. This will delete your entire plugin directory and git repository—not what we really want.
Option two is safer, however to test your plugin you have to continually copy from your development area to your QGIS plugin directory. Alternatively you could make commits and pull from your development area to the copy (assuming it is a git repo) in the QGIS plugin directory. If you are on a unix based system you could also create a Makefile to deploy the plugin for you.
The best solution is to use option two and use the QGIS_PLUGINPATH environment variable to point to your development directory. When present, QGIS_PLUGINPATH tells QGIS to search additional directories for plugins. Going this route allows you to develop in the directory created by Plugin Builder and test your plugin without any copying or pulling. The upside to this is since your plugin wasn’t installed through the Plugin Installer it can’t be uninstalled accidentally. When you are ready to test the uninstall and unloading of your plugin you can copy it to the main QGIS plugin directory.
Note: If you are using Windows there was a problem specifying QGIS_PLUGINPATH with colons in the path. This issue is fixed in revision 15073 and will make it into the next release.
No matter how you implement your workflow I suggest creating a repository on the QGIS hub (http://hub.qgis.org) or github.com.
Summary
Here is a summary of the steps to get started. We’ll assume your new plugin is named zoomer:
- Install Plugin Builder
- Create a directory that will contain all your plugins, for example my_plugins
- Create your plugin template using Plugin Builder. Be sure to select my_plugins when Plugin Builder asks where to create your plugin.
- Change to your plugin directory (e.g. my_plugins/zoomer) created by Plugin Buidler and create a git repository using:
git init
- Set the QGIS_PLUGINPATH evironment variable to point to the directory containing your plugin directory (my_plugins). Be sure to use the full path to my_plugins
- Start QGIS and use the Plugin Manager (Manage Plugins… from the Plugins menu) to enable your plugin. If it doesn’t show up in the list of plugins check to make sure you have set QGIS_PLUGINPATH correctly.
- Develop away, testing as you go. Make sure to commit changes regularly and push them to your repository on hub.qgis.org.
If you are new to git, take a look at the Pro Git book at http://progit.org/.
For help on developing QGIS plugins with Python, see the PyQGIS Cookbook.