eo
Rapport Projet Python
Hay Julien
Année 2011/2012
2011/2012 ‘M. Georges LonisSommaire
Introduction «.
Le seript en général 5...
Quelques détails sur les outils :....
Le pinceau
Le crayon :.
Lioutil forme =.
Le crayon magique 6
La gomme 6
Conelusion =... 7Inrropuction :
Tai tout d'abord commencé par réfléchir A 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
4 Tutilisateur de générer Ia 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 ete. Tai done
finis par trouvé un pseudo code qui paraissait « ordonné », cependant il aurai demandé plusiewss
mois de travail si je voulais arriver 4 un premier fonctionnement basique. En effet, ce type de
programme n'est pas simple 4 mettre en ceuvre et demande en général beaucoup de ressources
humaines et beaucoup de temps.
Tai finis par me diriger vers un programme plus basique et qui me permettais de m’entrainer 4
utiliser les interfaces graphique sous python : une interface me permettant de dessiner sur un canvas
Ce rapport ne va pas étre tr’s long a lire puisque le script est assez simple et commenté. Tl n'y a pas
Galgorithme paticulier, c'est surtout de I'mterface graphique.
a7LE scripT EN GENERAL ?
Tai commencé par eréer la fenétre et les différents « panneaux » qui mlont permis de placer
des outils... Des variables globales sont au début du script et me permettent de stoquer des chaines
de caractére correspondant aux outils, couleurs et formes. Il y a également une variable b qui me
permet de savoir A tout moment si le bouton est appuyé ou reliché. xold et yold me permettent de
stoquer les valeur x et y précédentes.
Tai erger une barre d'état qui affiche l'état (Voutil utilisé) en bas de interface graphique. A chaque
changement d'outils, une fonction de ce type est appelé pour changer l'affichage en bas :
def barreCrayon():
barreEtat.config(text = evatCourant.get())
Le programme est composé de 3 événements principaux lig au canvas =
#0n créer les détecteurs d'evenements qui appel des fonctions :
canevas. bind ", Chick)
canevas bind ( » Motion)
canevas.bind(
» ButtonRelease)
‘A chaque clique, la fonction Click est appelé je met b a « down ». Ceci me permet de savoir que le
bouton est enfones. Ensuite je regarde l'état et j’exéeute la bonne fonetion correspondant a l’outil en
passant la variable « event » me permettant de récupérer les x ot y.
Lorsquiil y a un mouvement sur le canvas, Ia fonetion « Motion» est appelé qui exécute les
fonctions lig 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 4 « down » car aucun dessin n'est fait si le bouton de la souris nest
pas enfones.
Ensuite, lors du relichement du bouton de Ia souris, je remet b a « up ».
Pour le choix de la couleur, je fait simplement un coneur ger() lors de la création d'une ligne par
exemple, C'est le méme fonetionnement pour la forme. Ces variables sont automatiquement
changées grice aux radio boutons.
De méme pour la taille, je fais un simple sailleEntry.get() dans les fonctions outils, c'est a dire que je
prend le nombre dans la zone de texte « tailleEntry »
47QUELQUES DETAILS SUR LES OUTILS :
Le pinceau :
def Pinceau(event) +
global xold, yold
if xold is not Mone and yold is not Wone :
event .widget.create_line(xold, yold, event.x, event.y, fill = couleur.get(),
Cette fonction outils trace simplement une ligne de xold/yold & event.x/event.y. Un pincean a une
certaine taille, j'ai donc pris la taille entrée par l'utilisateur et je I'ai mis dans width en option de la
fonetion create_fine, Cette méthode trace des traits d'une grosse épaisseur, et bien entendu il y a des
lanes 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 :
def Crayon(event) +
global x01d, yold
if wold is not Mone and yold is not Wone :
event .widget.create line(xold, yold, event.x, event.y, smooth = TRUE,
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» dia la lentenr de la boucle
«’événement comparer 4 la vitesse que peut prendre la souris.
Loutil forme
def Forme (event)
Af form.get() == “re:
event widget .create_rectangle(event.x + int(tailleEntry.get()), event.y + int(t
elif form.get() =
event.widget.create_oval(event.x + int (tailleEntry.get()), event.y + int (taille
elif form.get() = "po:
event widget .create_polygon(event.x - int(tailleEntry.get()), event.y, event.x,
angle" :
Lioutil forme eréer simplement une forme que l'utilisateur a choisit. Si la variable global form est
égale a « rectangle », alors je créer un rectangle, sinon,
57Le crayon magique :
def CrayonMagique(event) +
global xold, yold
if xold is not None and yold is not Wone :
event widget create_rectangle (xold, yold,event.x,event.¥,
Le crayon magique eréer des un rectangle chaque déplacement entre xold/yold et event.x/eventy.
Cette fonction donne des formes spéciales et une grandeur de rectangle proportionnel a la vitesse de
la sours.
La gomme :
def Gomme (event) +
event.widget.create_oval(event.x + int (cailleEntry.get()),
La gomme eréer des ovales en x et y de couleur blanche,
67ConcLusIon
En définitive, ce projet m'a appris 4 programmer en python et m'a apport quelques
connaissance dans Tinterface graphique. Tl a également été un bon entrainement dans la
programmation événementielle, Au début, j'ai beaucoup réfléchie & la problématique de /‘analyseur
de modification redondantes qui était ma premiére idée de projet mais, comme je I'ai expliqué dans
Vintroduction, je me suis plutot dirigé vers de I'interface graphique. Peut étre que je le développerai
un jour si jen ai le temps.
A partir de cet base de script, on peut facilement et rapidement eréer tout les outils que le veut, c'est
Tun des avantages de python,