Rapport Projet Python Hay Julien Année 2011/2012 2011/2012 M. Georges Louis Sommaire Introduction :........................................................................................................................................3 Le script en général :............................................................................................................................4 Quelques détails sur les outils :............................................................................................................5 Le pinceau :............................................................................................................................5 Le crayon :..............................................................................................................................5 L'outil forme :.........................................................................................................................5 Le crayon magique :...............................................................................................................6 La gomme :.............................................................................................................................6 Conclusion :..........................................................................................................................................7 INTRODUCTION : J'ai tout d'abord commencé par réfléchir à un projet totalement différent. Je vous en ai parlé en cours et par e-mail. Ce programme aurai été capable d'analyser des manipulations textuelles dans une interface graphique python (Tkinter) et de distinguer des redondances. Il aurai ensuite proposer à l'utilisateur de générer la suite logique des modifications du texte (exemple simple : je rentre 1 puis 2, le programme me propose 3 puis 4 etc). Pour générer les modifications proposées par le logiciel, il aurai simplement fallut appuyer sur un boutons pour chaque occurrence. J'ai longuement réfléchie aux algorithmes que ce programme demandait et aux structures de données etc. J'ai donc finis par trouvé un pseudo code qui paraissait « ordonné », cependant il aurai demandé plusieurs mois de travail si je voulais arriver à un premier fonctionnement basique. En effet, ce type de programme n'est pas simple à mettre en œuvre et demande en général beaucoup de ressources humaines et beaucoup de temps. J'ai finis par me diriger vers un programme plus basique et qui me permettais de m’entraîner à utiliser les interfaces graphique sous python : une interface me permettant de dessiner sur un canvas avec différents outils. Ce rapport ne va pas être très long à lire puisque le script est assez simple et commenté. Il n'y a pas d'algorithme particulier, c'est surtout de l'interface graphique. 3/7 LE SCRIPT EN GÉNÉRAL : J'ai commencé par créer la fenêtre et les différents « panneaux » qui m'ont permis de placer des outils... Des variables globales sont au début du script et me permettent de stoquer des chaînes de caractère correspondant aux outils, couleurs et formes. Il y a également une variable b qui me permet de savoir à tout moment si le bouton est appuyé ou relâché. xold et yold me permettent de stoquer les valeur x et y précédentes. J'ai créer une barre d'état qui affiche l'état (l’outil utilisé) en bas de l'interface graphique. À chaque changement d'outils, une fonction de ce type est appelé pour changer l'affichage en bas : Le programme est composé de 3 événements principaux lié au canvas : A chaque clique, la fonction Click est appelé je met b à « down ». Ceci me permet de savoir que le bouton est enfoncé. Ensuite je regarde l'état et j’exécute la bonne fonction correspondant à l’outil en passant la variable « event » me permettant de récupérer les x et y. Lorsqu'il y a un mouvement sur le canvas, la fonction « Motion » est appelé qui exécute les fonctions lié aux outils et enregistre le x et y précédent dans les variables xold et yold. Ceci est exécuter seulement si b est égale à « down » car aucun dessin n'est fait si le bouton de la souris n'est pas enfoncé. Ensuite, lors du relâchement du bouton de la souris, je remet b à « up ». Pour le choix de la couleur, je fait simplement un couleur.get() lors de la création d'une ligne par exemple. C'est le même fonctionnement pour la forme. Ces variables sont automatiquement changées grâce aux radio boutons. De même pour la taille, je fais un simple tailleEntry.get() dans les fonctions outils, c'est a dire que je prend le nombre dans la zone de texte « tailleEntry ». 4/7 QUELQUES DÉTAILS SUR LES OUTILS : Le pinceau : Cette fonction outils trace simplement une ligne de xold/yold à event.x/event.y. Un pinceau a une certaine taille, j'ai donc pris la taille entrée par l'utilisateur et je l'ai mis dans width en option de la fonction create_line. Cette méthode trace des traits d'une grosse épaisseur, et bien entendu il y a des blancs entre les traits aux extrémités. On aurai pu afficher des oval mais j'ai préféré garder cet méthode qui est plus élégante. Le crayon : Le crayon est basé sur le même principe mais avec une épaisseur de 1 pixel. Le fait de tracer un trait entre xold/yold et event.x/event.y permet de ne pas avoir de « blanc » dû à la lenteur de la boucle d’événement comparer à la vitesse que peut prendre la souris. L'outil forme : L'outil forme créer simplement une forme que l'utilisateur a choisit. Si la variable global form est égale à « rectangle », alors je créer un rectangle, sinon... 5/7 Le crayon magique : Le crayon magique créer des un rectangle à chaque déplacement entre xold/yold et event.x/event.y. Cette fonction donne des formes spéciales et une grandeur de rectangle proportionnel à la vitesse de la souris. La gomme : La gomme créer des ovales en x et y de couleur blanche. 6/7 CONCLUSION : En définitive, ce projet m'a appris à programmer en python et m'a apporté quelques connaissance dans l'interface graphique. Il a également été un bon entraînement dans la programmation événementielle. Au début, j'ai beaucoup réfléchie à la problématique de l'analyseur de modification redondantes qui était ma première idée de projet mais, comme je l'ai expliqué dans l'introduction, je me suis plutôt dirigé vers de l'interface graphique. Peut être que je le développerai un jour si j'en ai le temps. A partir de cet base de script, on peut facilement et rapidement créer tout les outils que le veut, c'est l'un des avantages de python. 7/7