﻿{"id":16360,"date":"2026-05-27T10:00:00","date_gmt":"2026-05-27T08:00:00","guid":{"rendered":"https:\/\/www.sigterritoires.fr\/?p=16360"},"modified":"2026-05-23T14:53:30","modified_gmt":"2026-05-23T12:53:30","slug":"create-qgis-plugin-with-plugin-builder","status":"publish","type":"post","link":"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/","title":{"rendered":"[EN]Developing a QGIS Plugin: Creating a Plugin with Plugin Builder"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Creating a QGIS plugin is much easier than it may seem, especially when you are new to programming. Thanks to <strong>Plugin Builder<\/strong>, you can generate the complete structure of a QGIS plugin in just a few minutes, without writing any complex code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this second article of the tutorial series, we will see <strong>how to create your first QGIS plugin using Plugin Builder<\/strong>, step by step: installing the tool, choosing the right template, disabling advanced options, and generating the plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal is to <strong>quickly obtain a working plugin in QGIS<\/strong>, in order to understand the overall workflow before progressively diving into Python code.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenu <\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Creating_your_first_plugin_with_Plugin_Builder\" >Creating your first plugin with Plugin Builder<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#What_is_Plugin_Builder\" >What is Plugin Builder?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Installing_Plugin_Builder\" >Installing Plugin Builder<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Launching_the_creation_wizard\" >Launching the creation wizard<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#General_plugin_information\" >General plugin information<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Plugin_name_and_description\" >Plugin name and description<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Version_and_author\" >Version and author<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Important_technical_settings\" >Important technical settings<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Choosing_a_template\" >Choosing a template<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Options_to_disable_when_starting\" >Options to disable when starting<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Plugin_class\" >Plugin class<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Menu_and_icon\" >Menu and icon<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Generating_the_plugin\" >Generating the plugin<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Where_should_the_plugin_be_placed\" >Where should the plugin be placed?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Activating_the_plugin_in_QGIS\" >Activating the plugin in QGIS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Understanding_what_Plugin_Builder_created\" >Understanding what Plugin Builder created<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Common_beginner_mistakes\" >Common beginner mistakes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#What_you_have_learned\" >What you have learned<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/create-qgis-plugin-with-plugin-builder\/#Whats_next\" >What\u2019s next?<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Creating_your_first_plugin_with_Plugin_Builder\"><\/span>Creating your first plugin with Plugin Builder<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the first article, we explained what QGIS plugins are used for and which files they are made of. Now it\u2019s time to move on to practice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The objective of this article is simple: <strong>create a functional QGIS plugin without writing complex code<\/strong>, in order to understand the basic development cycle of a plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To do this, we will use an essential tool for beginners: <strong>Plugin Builder<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_is_Plugin_Builder\"><\/span>What is Plugin Builder?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Plugin Builder is an official QGIS plugin that automatically generates the skeleton of a QGIS plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It creates for you:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>the folder structure,<\/li>\n\n\n\n<li>the essential Python files,<\/li>\n\n\n\n<li>the <code>metadata.txt<\/code> file,<\/li>\n\n\n\n<li>a plugin that can be immediately loaded into QGIS.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Plugin Builder helps avoid common beginner mistakes and allows you to focus on what really matters: <strong>understanding and modifying an existing plugin<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Installing_Plugin_Builder\"><\/span>Installing Plugin Builder<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open QGIS<\/li>\n\n\n\n<li>Go to <strong>Plugins \u2192 Manage and Install Plugins<\/strong><\/li>\n\n\n\n<li>Search for <strong>Plugin Builder<\/strong><\/li>\n\n\n\n<li>Install it<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Once installed, Plugin Builder is available from the <strong>Plugins<\/strong> menu.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Launching_the_creation_wizard\"><\/span>Launching the creation wizard<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <strong>Plugins \u2192 Plugin Builder \u2192 Plugin Builder<\/strong><\/li>\n\n\n\n<li>The creation wizard opens<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You will need to fill in several fields. Don\u2019t worry: some of them are purely descriptive.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"General_plugin_information\"><\/span>General plugin information<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Plugin_name_and_description\"><\/span>Plugin name and description<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Plugin name<\/strong>: a user-friendly name (e.g. <em>MyFirstPlugin<\/em>)<\/li>\n\n\n\n<li><strong>Description<\/strong>: a short sentence explaining what the plugin does<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These details will appear in the QGIS Plugin Manager.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Version_and_author\"><\/span>Version and author<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Version<\/strong>: start simply with <code>0.1<\/code><\/li>\n\n\n\n<li><strong>Author<\/strong>: your name or your organization\u2019s name<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Important_technical_settings\"><\/span>Important technical settings<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Choosing_a_template\"><\/span>Choosing a template<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Plugin Builder offers several templates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For beginners, it is <strong>strongly recommended<\/strong> to choose:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Template: Tool button with dialog<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This template is the most educational because:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>it creates a toolbar button in QGIS,<\/li>\n\n\n\n<li>it prepares a simple graphical dialog,<\/li>\n\n\n\n<li>it matches the structure of most common plugins.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">It will serve as a solid foundation for the next articles.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Options_to_disable_when_starting\"><\/span>Options to disable when starting<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For a first plugin, it is recommended to <strong>disable all advanced options<\/strong>, especially:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Internationalization (translations)<\/li>\n\n\n\n<li>Help (embedded documentation)<\/li>\n\n\n\n<li>Unit testing<\/li>\n\n\n\n<li>Advanced packaging<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These features are useful for mature plugins, but they unnecessarily complicate the structure for beginners.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We will come back to them later, once the basics are well understood.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Plugin_class\"><\/span>Plugin class<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Plugin Builder asks for the name of the main plugin class.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Plugin name: <code>MyFirstPlugin<\/code><\/li>\n\n\n\n<li>Class: <code>MyFirstPlugin<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">By convention, using the same name and capitalization helps avoid confusion.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Menu_and_icon\"><\/span>Menu and icon<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can specify:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>the menu where the plugin will appear (usually <strong>Plugins<\/strong>),<\/li>\n\n\n\n<li>an icon (optional at this stage).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These choices can easily be changed later.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Generating_the_plugin\"><\/span>Generating the plugin<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once all fields are filled:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click <strong>Generate<\/strong><\/li>\n\n\n\n<li>Choose the destination folder<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Plugin Builder automatically creates the plugin folder with all required files.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Where_should_the_plugin_be_placed\"><\/span>Where should the plugin be placed?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For QGIS to detect the plugin, it must be located in the <strong>user plugins directory<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Depending on your system:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Windows<\/strong><br><code>C:\/Users\/...\/AppData\/Roaming\/QGIS\/QGIS3\/profiles\/default\/python\/plugins<\/code><\/li>\n\n\n\n<li><strong>Linux<\/strong><br><code>~\/.local\/share\/QGIS\/QGIS3\/profiles\/default\/python\/plugins<\/code><\/li>\n\n\n\n<li><strong>macOS<\/strong><br><code>~\/Library\/Application Support\/QGIS\/QGIS3\/profiles\/default\/python\/plugins<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">&#x1f4a1; Tip: Plugin Builder usually suggests the correct folder by default.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Activating_the_plugin_in_QGIS\"><\/span>Activating the plugin in QGIS<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open <strong>Plugins \u2192 Manage and Install Plugins<\/strong><\/li>\n\n\n\n<li>Go to the <strong>Installed<\/strong> tab<\/li>\n\n\n\n<li>Check your plugin<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">If everything went well, the plugin appears in the menu and can be activated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#x1f449; At this stage, the plugin does almost nothing\u2026 and that\u2019s perfectly normal.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Understanding_what_Plugin_Builder_created\"><\/span>Understanding what Plugin Builder created<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before going any further, take some time to open the generated files:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>__init__.py<\/code><\/li>\n\n\n\n<li><code>metadata.txt<\/code><\/li>\n\n\n\n<li>the main Python file<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You should now recognize the elements described in the previous article.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Common_beginner_mistakes\"><\/span>Common beginner mistakes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The plugin does not appear \u2192 wrong folder<\/li>\n\n\n\n<li>Error when loading \u2192 incorrect class name or capitalization<\/li>\n\n\n\n<li>QGIS refuses the plugin \u2192 incorrect minimum QGIS version<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These errors are normal and part of the learning process.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_you_have_learned\"><\/span>What you have learned<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">By the end of this article, you now know how to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>install Plugin Builder,<\/li>\n\n\n\n<li>generate an empty QGIS plugin,<\/li>\n\n\n\n<li>install it locally,<\/li>\n\n\n\n<li>activate it in QGIS.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You have crossed an important milestone: <strong>you are officially a QGIS plugin developer<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Whats_next\"><\/span>What\u2019s next?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the next article, we will see:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>how to add a button to QGIS,<\/li>\n\n\n\n<li>how to display a simple dialog window,<\/li>\n\n\n\n<li>how to structure the code without getting lost.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">&#x1f449; A plugin that does nothing today can become a powerful tool tomorrow.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Creating a QGIS plugin is much easier than it may seem, especially when you are new to programming. Thanks to Plugin Builder, you can generate the complete structure of a QGIS plugin in just a few&hellip;<\/p>\n","protected":false},"author":1,"featured_media":16328,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"give_campaign_id":0,"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[3394,1377],"tags":[4141,4143,4139,4137,4115,4145],"class_list":["post-16360","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pluigin-en","category-qgis-en","tag-develop-qgis-plugin","tag-qgis-plugin-beginner","tag-qgis-plugin-builder","tag-qgis-plugin-development","tag-qgis-plugin-tutorial","tag-qgis-python-plugin"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2026\/01\/pluginsQGIS2.jpg?fit=409%2C307&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p6XU0A-4fS","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/16360","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/comments?post=16360"}],"version-history":[{"count":0,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/16360\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media\/16328"}],"wp:attachment":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media?parent=16360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/categories?post=16360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/tags?post=16360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}