Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

review of some files into doc/source/worshop #2

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/source/workshop/custom_form.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Création de formulaires spécialisés
==============================================

Une possibilité intéressante de personnaliser QGIS est de créer des formulaires personnalisés pour les données. QGIS intègre un mécanisme qui rend la création de tels formulaires relativement simples.
Une possibilité intéressante de personnaliser QGIS est de créer des formulaires personnalisés pour les données. QGIS intègre un mécanisme qui rend la création de tels formulaires relativement simple.

Nous pouvons aller un peu plus loin avec ce mécanisme en y ajoutant des actions de validation de données par exemple.

Expand All @@ -21,7 +21,7 @@ Nous prendrons comme exemple le fichier *50m_admin_0_countries* qui a notamment
- GDP_USDM
- COMMENT

Nous allons créer un formulaire qui prenne en compte tout d'abord l'identifiant unique **ADM0_A3** et le champ **NAME** pour les présenter et permettre de les éditer plus simplement.
Nous allons créer un formulaire qui prend en compte tout d'abord l'identifiant unique **ADM0_A3** et le champ **NAME** pour les présenter et permettre de les éditer plus simplement.

Ajoutons quelques labels et éditeurs de lignes correspondant à la donnée. Réglons maintenant notre formulaire pour utiliser un arrangement en grille (clic droit sur un espace vide -> Layout -> Layout in Grid).

Expand All @@ -33,7 +33,7 @@ On enregistre le formulaire ( *.ui* ) dans notre espace de travail.
Dans QGIS, on ouvre la boîte de dialogue des propriétés de la couche. Dans l'onglet général on sélectionne pour "Éditer l'interface" notre fichier .ui précedemment sauvé.

On peut maintenant passer en mode édition et sélectionner un objet avec l'outil d'identification de feature.
Notre formulaire apparaît ! Nous sommes en mode édition donc tous les changement que l'on effectue dans le formulaire vont être répercutés dans le fichier. Si nous ne sommes pas en mode édition alors le formulaire apparait avec les widgets désactivés et juste un bouton "Annuler".
Notre formulaire apparaît ! Nous sommes en mode édition donc tous les changements que l'on effectue dans le formulaire vont être répercutés dans le fichier. Si nous ne sommes pas en mode édition alors le formulaire apparait avec les widgets désactivés et juste un bouton "Annuler".

Validation et logique
---------------------
Expand Down
8 changes: 4 additions & 4 deletions docs/source/workshop/debug.rst
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Notez la flèche\ ``->`` \. Cette commande sans argument renvoie 11 lignes, ave
75 # run method that performs all the real work


Un seul argument numérique affiche la ligne que demandons avec 5 lignes avant, et après. Deux argumensts affichent le code entre ces deux numéros de lignes.
Un seul argument numérique affiche la ligne que nous demandons avec 5 lignes avant, et après. Deux argumensts affichent le code entre ces deux numéros de lignes.

\ **3.** \On peut aussi ajouter des points d'arrêt quand on est dans pdb. On peut utiliser la commande\ ``break`` \ou juste le raccourci\ ``b`` \avec un argument numérique pour désigner sur quelle ligne on veut placer un point d'arrêt::

Expand All @@ -105,7 +105,7 @@ Un seul argument numérique affiche la ligne que demandons avec 5 lignes avant,
Num Type Disp Enb Where
1 breakpoint keep yes at /home/gcorradini/.qgis/python/plugins/rastervaluedisplay/rastervaluedisplay.py:64

\ **5.** \Maintenant que j'ai défini un nouveau point d'arrêt, je veux continuer à exécuter mon code jusqu'à y parvenir. Je peux continuer avec la raccourci\ ``c`` \ou la commande\ ``continue`` \.::
\ **5.** \Maintenant que j'ai défini un nouveau point d'arrêt, je veux continuer à exécuter mon code jusqu'à y parvenir. Je peux continuer avec le raccourci\ ``c`` \ou la commande\ ``continue`` \.::

(Pdb) c
> /home/gcorradini/.qgis/python/plugins/rastervaluedisplay/rastervaluedisplay.py(64)handleXY()
Expand All @@ -123,9 +123,9 @@ Un seul argument numérique affiche la ligne que demandons avec 5 lignes avant,
68 success, data = self.cLayer.identify(point)
69 final = ""

Remarquez que lorsque je liste le code la où l'exécution s'est arrêtée, un\ ``B->`` \montre qu'il s'agit d'un point d'arrêt.
Remarquez que lorsque je liste le code où l'exécution s'est arrêtée, un\ ``B->`` \montre qu'il s'agit d'un point d'arrêt.

\ **6.** \On peut avancer dans le code ligne par ligne avec deux commandes :\ ``step`` \et\ ``next`` \. \ ``step`` \descend dans toutes les fonctions (mêmes les fonctions Python standard) et\ ``next`` \les exécute et avance à la ligne suivante. Soyez surs de comprendre le résultat de la commande. Si l'exécution était arrêtée sur le point d'arrêt ci-dessus,\ ``next`` \emmène à la ligne 65::
\ **6.** \On peut avancer dans le code ligne par ligne avec deux commandes :\ ``step`` \et\ ``next`` \. \ ``step`` \descend dans toutes les fonctions (mêmes les fonctions Python standard) et\ ``next`` \les exécute et avance à la ligne suivante. Soyez sûrs de comprendre le résultat de la commande. Si l'exécution était arrêtée sur le point d'arrêt ci-dessus,\ ``next`` \emmène à la ligne 65::

(Pdb) n
> /home/gcorradini/.qgis/python/plugins/rastervaluedisplay/rastervaluedisplay.py(65)handleXY()
Expand Down
8 changes: 4 additions & 4 deletions docs/source/workshop/event_driven_plugins.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ Créer des plugins QGIS avec les évènements
Concepts d'évènements dans QGIS
-------------------------------

La conception orientée évènements dans la bibliothèque Qt utilise les notions de *signal* et *slot*. Comme mentionné dans la partie 2, quelques bonne ressources pour aller plus loin sur les signaux et les slots sont\ `ce tutoriel PyQt <http://www.commandprompt.com/community/pyqt/c1267>`_ \et la\ `documentation officielle de Qt <http://doc.qt.nokia.com/4.7/signalsandslots.html>`_\. Nous allons présenter ici les points principaux.
La conception orientée évènements dans la bibliothèque Qt utilise les notions de *signal* et *slot*. Comme mentionné dans la partie 2, quelques bonnes ressources pour aller plus loin sur les signaux et les slots sont\ `ce tutoriel PyQt <http://www.commandprompt.com/community/pyqt/c1267>`_ \et la\ `documentation officielle de Qt <http://doc.qt.nokia.com/4.7/signalsandslots.html>`_\. Nous allons présenter ici les points principaux.

SIGNAL
********

Les objets Qt (tous ce qui hérite de QObject) a la possibilité d'émettre des signaux. L'objet émet un signal quand il veut diffuser un évènement d'importance. Par exemple, les concepteurs de la classe\ ``QgsMapCanvas`` \considèrent qu'il est important pour un objet de type canvas de carte de diffuser un QgsPoint quand la souris le survole. Le signal\ `xyCoordinates <http://doc.qgis.org/head/classQgsMapCanvas.html#bf90fbd211ea419ded7c934fd289f0ab>`_ \ définit la diffusion. La signature de la fonction de signal\ ``xyCoordintes`` \est la suivante::
Les objets Qt (tout ce qui hérite de QObject) a la possibilité d'émettre des signaux. L'objet émet un signal quand il veut diffuser un évènement d'importance. Par exemple, les concepteurs de la classe\ ``QgsMapCanvas`` \considèrent qu'il est important pour un objet de type canvas de carte de diffuser un QgsPoint quand la souris le survole. Le signal\ `xyCoordinates <http://doc.qgis.org/head/classQgsMapCanvas.html#bf90fbd211ea419ded7c934fd289f0ab>`_ \ définit la diffusion. La signature de la fonction de signal\ ``xyCoordintes`` \est la suivante::

void QgsMapCanvas::xyCoordinates ( const QgsPoint & p )

Expand Down Expand Up @@ -46,7 +46,7 @@ La fonction slot qui se connecte à un signal doit accepter les mêmes arguments
Créer des signaux particuliers
********************************

Même si cela apporte un peu de confusion, les développeurs ont la possibilité de créer leurs propres signaux. Ci dessous se trouve un exemple de comment créer un signal spécifique et y connecter un slot. L'exemple est tiré du plugin\ ``foss4g2011_example3_solution`` \:
Même si cela apporte un peu de confusion, les développeurs ont la possibilité de créer leurs propres signaux. Ci-dessous se trouve un exemple de comment créer un signal spécifique et y connecter un slot. L'exemple est tiré du plugin\ ``foss4g2011_example3_solution`` \:


\ **1.** \Assurez vous que votre classe de plugin dérive de QObject. Elle doit aussi appeler le constructeur de QObject dans la méthode\ ``__init__`` \comme ci dessous::
Expand Down Expand Up @@ -79,7 +79,7 @@ Dans l'exercice suivant vous pouvez installer l'exemple #3 de plugin basique com

Nous avons fourni quelques exemples de widgets GUI (case à cocher et boutons) pour vous permettre de vous connecter dynamiquement à quelques signaux ou pour générer des signaux de test. Le but sera pour vous de regarder le code et comprendre comment cela est fait (à la fois en regardant le GUI dans le designer et les connexions signal/slot). Une fois que vous comprenez comment cela est fait, nous pouvons tenter de nous connecter à d'autres signaux. Dans l'exemple #3 basique, nous avons fourni quelques signaux d'exemple sur lesquels se connecter dans le code commenté. Nous avons aussi ajouté des éléments de GUI dans le designer qui sont désactivés.

Ouvrez Qt Desiger et trouver comment "activer" la case à cocher pour le signal que vous voulez écouter (Astuce : il y en a deux qui sont désactivés). Une fois que vous avez les éléments du GUI activés, sauvez le fichier .ui et lancez le make dans le répertoire des plugins. Cela va recompiler le fichier .ui en un fichier .py. Ouvrez QGIS et vérifiez que le plugin a maintenant ces éléments de GUI activés. Maintenant, revenez dans le code principal du plugin et trouvez le code commenté pour les signaux que vous avez activé dans l'interface... Et essayez de les activer en décommentant le code.
Ouvrez Qt Desiger et trouver comment "activer" la case à cocher pour le signal que vous voulez écouter (Astuce : il y en a deux qui sont désactivés). Une fois que vous avez les éléments du GUI activés, sauvez le fichier .ui et lancez le make dans le répertoire des plugins. Cela va recompiler le fichier .ui en un fichier .py. Ouvrez QGIS et vérifiez que le plugin a maintenant ces éléments de GUI activés. Maintenant, revenez dans le code principal du plugin et trouvez le code commenté pour les signaux que vous avez activés dans l'interface... Et essayez de les activer en décommentant le code.

Pour ceux qui cherchent de l'aventure, trouvez un signal dans la documentation QGIS que vous voulez écouter, ajouter un élément d'interface au plugin (une case à cocher ou un élément similaire à ceux déjà implémentés), et finalement ajoutez la connexion du signal avec une fonction spécifique qui écrit dans la zone de texte.

Expand Down
2 changes: 1 addition & 1 deletion docs/source/workshop/git.rst
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Presque toutes les opérations sont locales
------------------------------------------

La plupart des opérations de Git ne nécessite que des fichiers et ressources locales - généralement aucune information venant d'un autre ordinateur du réseau n'est nécessaire.
Si vous êtes habitué à un CVCS où toutes les opérations sont ralenties par la latence des échanges réseau, cet aspect de Git vous fera penser que les dieux de la vitesse ont octroyé leurs pouvoirs à Git.
Si vous êtes habitué à un VCS où toutes les opérations sont ralenties par la latence des échanges réseau, cet aspect de Git vous fera penser que les dieux de la vitesse ont octroyé leurs pouvoirs à Git.
Comme vous disposez de l'historique complet du projet localement sur votre disque dur, la plupart des opérations semblent instantanées.


Expand Down
10 changes: 5 additions & 5 deletions docs/source/workshop/git_plugin.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Copier le modèle du plugin dans le répertoire de plugin QGIS et travailler à
Travailler dans le répertoire où on a créé nos modèles et faire un lien à partir du répertoire de plugin.

Le problème avec la première option est que si on veut tester la fonction de désinstallation des plugins, cela va supprimer tout le répertoire du plugin, et on risque de perdre notre code.
Avec la seconde option on a pas ce risque, mais il faut à chaque fois que l'on veut tester la désinstallation refaire le lien à partir du répertoire de plugin.
Avec la seconde option on n'a pas ce risque, mais il faut à chaque fois que l'on veut tester la désinstallation refaire le lien à partir du répertoire de plugin.

Il y a deux autres solutions pour régler ce problème.

Expand Down Expand Up @@ -41,7 +41,7 @@ Voici les étapes nécessaires pour créer un plugin avec gestion du code source

#. Installez le Plugin Builder
#. Créez un répertoire qui va contenir tous vos plugins, par exemple *my_plugins*
#. Créez un modèle de plugin en utilisant le Plugin Builder, et indiquez lui le répertoire précédemment créé comme base
#. Créez un modèle de plugin en utilisant le Plugin Builder, et indiquez-lui le répertoire précédemment créé comme base
#. Allez dans le répertoire du plugin (e.g. my_plugins/zoomer) créé par le Plugin Builder, et créez un dépôt git comme ceci ::

git init
Expand Down Expand Up @@ -71,7 +71,7 @@ Commiter toutes les modifications::

git commit -a

Attention de bien spécifier un message explicite sur les modifications que vous avez effectuées.
Attention à bien spécifier un message explicite sur les modifications que vous avez effectuées.

Pousser les modifications sur le serveur distant::

Expand Down Expand Up @@ -191,7 +191,7 @@ Des options permettent d'activer les diverses fonctionnalités voulues pour l'in

* un bugtracker (avec gestion de bounty ou de feature en plus des bugs)
* Des champs spécifiques pour la gestion du bug
* un dépot de fichier
* un dépôt de fichier
* un calendrier
* un Wiki

Expand Down Expand Up @@ -229,7 +229,7 @@ Distribuer avec le dépôt centralisé de plugins

Maintenant que notre projet est développé, et possède un environnement de développement correct, nous pouvons distribuer notre plugin. Le site http://plugins.qgis.org/ regroupe tous les plugins de QGIS et permet de faire de la recherche par mot-clef, d'évaluer les plugins suivant leur état de développement, leur popularité, etc.

Le site regroupe également des snippets de code Python qui peuvent être intéressant à partager.
Le site regroupe également des snippets de code Python qui peuvent être intéressants à partager.

Le login se fait avec le compte OSGeo.

Expand Down
10 changes: 5 additions & 5 deletions docs/source/workshop/plugins_exercises.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,19 @@ Si vous ne vous sentez pas à l'aise avec le Plugin Builder pour créer un outil

1. Ouvrez QGIS et chargez la couche de relief ombré \ ``/home/formation/natural_earth_50m/raster/shaded_relief/SR_50M/SR_50M.tif``
2. Cliquez sur l'outil plugin appelé\ ``foss4g2011_example2_solution``\ou\ ``E#2SOL``
3. Balayez la carte avec le curser de la souris et regardez les valeurs RGB changer dynamiquement. C'est le résultat final qu'il faut obtenir.
3. Balayez la carte avec le curseur de la souris et regardez les valeurs RGB changer dynamiquement. C'est le résultat final qu'il faut obtenir.
4. Naviguer dans \ ``/home/formation/.qgis/python/plugins/foss4g2011_example2_starter/``
5. Ouvrir les fichiers \ ``foss4g2011_example2_starter.py`` \et\ ``foss4g2011_example2_starterdialog.py`` \et trouvez les zones avec du code commenté. Vous allez devoir décommentez le code de ces deux fichiers pour faire fonctionner l'outil comme la solution proposée.

Exercice avancé
-----------------------

The Tool Requirements
*************************
Fonctionnalités de l'outil
****************************

* Display every band value for a raster on mouse hover. That sounds confusing, but the idea is that your tool should work with a single grayscale raster or an RGBA raster without blowing up. There will be no mouse clicks, we'll just be responding to the normal mouse cursor movement over the map canvas
* Afficher les valeurs de chaque bande d'un raster pour le pixel sous le curseur. L'idée est que l'outil doit marcher quelque soit le nombre de bande du raster. L'outil ne répondra pas au clic souris mais simplement au mouvement sur la carte.

* Feedback of raster values will be output to a GUI (your choice on how to implement this on the GUI)
* Les valeurs devront être affichées dans une interface graphique (le choix de l'implémentation est libre).

Conseils
***************
Expand Down
8 changes: 4 additions & 4 deletions docs/source/workshop/plugins_intro.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Pour créer des plugins Python QGIS vous allez avoir besoin d'au moins 4 types d
- un fichier avec une extension ``.ui`` qui décrit votre interface graphique (GUI). Il doit être compilé en un module Python en utilisant l'outil en ligne de commande \ ``pyuic4``\.
- un fichier qui donne des informations générales de configuration sur votre plugin tel que son nom et son auteur\ ``__init__.py``\.
- un fichier avec une extension\ ``.qrc``\ décrivant les ressources que votre plugin va utiliser tels que les images. Ce fichier doit être compilé en un module Python en utilisant l'outil en ligne de commande\ ``pyrcc4``\.
- enfin, le fichier qui effectue le réel travail. Ce fichier est juste un module Python normal avec quelques import spécifiques et des noms de méthodes standardisées. Il peut être nommée comme on le souhaite, même si le nom du fichier est généralement associé au nom du plugin.
- enfin, le fichier qui effectue le réel travail. Ce fichier est juste un module Python normal avec quelques imports spécifiques et des noms de méthodes standardisées. Il peut être nommé comme on le souhaite, même si le nom du fichier est généralement associé au nom du plugin.

-----------------------------

Expand All @@ -30,7 +30,7 @@ Pour avoir une meilleure idée de comment ces différents fichiers composent un
drwxr-xr-x 3 formation formation 4.0K 2011-07-07 13:41 pluginbuilder


Le projet\ **pluginbuilder** \situé dans\ ``/home/formation/.qgis/python/plugins`` \est un plugin avec lequel nous allons nous familiariser sous peu. Il rend la création de plugins plus simlpe en créant les modèles de fichiers automagiquement (les fichiers cités précedemment).Le\ **pluginbuilder** \ajoute aussi du code dans ces modèles, que nous allons pouvoir modifier ensuite.
Le projet\ **pluginbuilder** \situé dans\ ``/home/formation/.qgis/python/plugins`` \est un plugin avec lequel nous allons nous familiariser sous peu. Il rend la création de plugins plus simple en créant les modèles de fichiers automatiquement (les fichiers cités précedemment).Le\ **pluginbuilder** \ajoute aussi du code dans ces modèles, que nous allons pouvoir modifier ensuite.


\ **3.** \Changez de répertoire en entrant dans\ ``pluginbuilder`` \et affichez uniquement les fichiers d'extension\ ``(.ui, .py and .qrc)`` \comme ci-dessous. La raison pour laquelle nous ne visualisons que ces fichiers est pour exclure les modules Python compilés -- ceux avec une extension\ ``.pyc`` \::
Expand All @@ -50,7 +50,7 @@ Le projet\ **pluginbuilder** \situé dans\ ``/home/formation/.qgis/python/plugi
-rw-r--r-- 1 formation formation 1880 2011-07-07 13:41 ui_results.ui


Notez que nous nous intéressons uniquement aux types de fichiers ici. Comme on peut le voir, il semble y avoir 2 GUIs associés à ce plugin. On le voit car il y a deux fichirs avec une extension\ ``.ui`` \::
Notez que nous nous intéressons uniquement aux types de fichiers ici. Comme on peut le voir, il semble y avoir 2 GUIs associés à ce plugin. On le voit car il y a deux fichiers avec une extension\ ``.ui`` \::

-rw-r--r-- 1 formation formation 6.9K 2011-07-07 13:41 ui_pluginbuilder.ui
-rw-r--r-- 1 formation formation 1.9K 2011-07-07 13:41 ui_results.ui
Expand Down Expand Up @@ -86,6 +86,6 @@ On voit aussi qu'il y a des fichiers de ressource associés avec le projet. Il f
-rw-r--r-- 1 formation formation 23K 2011-07-07 13:41 resources.py
-rw-r--r-- 1 formation formation 143 2011-07-07 13:41 resources.qrc

Ceci fait, on peut deviner que tous les autres fichiers avec une extension\ ``.py`` \dont nous n'avons pas encore parlé est lié à la logique du plugin. Il semblo aussi y avoir des documents et des images dont nous ne nous préoccupons pas encore.
Ceci fait, on peut deviner que tous les autres fichiers avec une extension\ ``.py`` \dont nous n'avons pas encore parlé sont liés à la logique du plugin. Il semble aussi y avoir des documents et des images dont nous ne nous préoccupons pas encore.


Loading