« Programmation Python/Utilisation de fenêtres et de graphismes » : différence entre les versions
Contenu supprimé Contenu ajouté
m Modèle:Python using AWB |
|||
Ligne 133 :
Le bouton « Quitter » sert bien évidemment à terminer l'application en refermant la fenêtre.
<source lang="python">
# Petit exercice utilisant la bibliothèque graphique Tkinter
Ligne 178 :
fen1.destroy() # destruction (fermeture) de la fenêtre
</
Conformément à ce que nous avons expliqué dans le texte des pages précédentes, la fonctionnalité de ce programme est essentiellement assurée par les deux fonctions <code>drawline()</code> et <code>changecolor()</code>, qui seront activées par des événements, ceux-ci étant eux-mêmes définis dans la phase d'initialisation.
Dans cette phase d'initialisation, on commence par importer l'intégralité du module ''Tkinter'' ainsi qu'une fonction du module ''random'' qui permet de tirer des nombres au hasard. On crée ensuite les différents ''widgets'' par instanciation à partir des classes <code>Tk()</code>, <code>Canvas()</code> et <code>Button()</code>.
L'initialisation se termine avec l'instruction <code>fen1.mainloop()</code> qui démarre le réceptionnaire d'événements. Les instructions qui suivent ne seront exécutées qu'à la sortie de cette boucle, sortie elle-même déclenchée par la méthode <code>fen1.quit()</code> (voir ci-après).
Ligne 188 :
L'option <code>command</code> utilisée dans l'instruction d'instanciation des boutons permet de désigner la fonction qui devra être appelée lorsqu'un événement « clic gauche de la souris sur le ''widget'' » se produira. Il s'agit en fait d'un raccourci pour cet événement particulier, qui vous est proposé par ''Tkinter'' pour votre facilité parce que cet événement est celui que l'on associe naturellement à un ''widget'' de type bouton. Nous verrons plus loin qu'il existe d'autres techniques plus générales pour associer n'importe quel type d'événement à n'importe quel ''widget''.
Les fonctions de ce script peuvent modifier les valeurs de certaines variables qui ont été définies au niveau principal du programme. Cela est rendu possible grâce à l'instruction global utilisée dans la définition de ces fonctions. Nous nous permettrons de procéder ainsi pendant quelque temps encore (ne serait-ce que pour vous habituer à distinguer les comportements des variables locales et globales), mais comme vous le comprendrez plus loin, cette pratique n'est pas tout à fait recommandable, surtout lorsqu'il s'agit d'écrire de grands programmes. Nous apprendrons une meilleure technique lorsque nous aborderons l'étude des classes
Dans notre fonction <code>changecolor()</code>, une couleur est choisie au hasard dans une liste. Nous utilisons pour ce faire la fonction <code>randrange()</code> importée du module ''random''. Appelée avec un argument N, cette fonction renvoie un nombre entier, tiré au hasard entre zéro et N-1.
Ligne 195 :
{{Exercices|Exercices : modifications au programme « Tracé de lignes » ci-dessus.}}
# Comment faut-il modifier le programme pour ne plus avoir que des lignes de couleur <code>cyan</code>, <code>maroon</code> et <code>green</code> ?
▲<li>Agrandissez le canevas de manière à lui donner une largeur de 500 unités et une hauteur de 650. Modifiez également la taille des lignes, afin que leurs extrémités se confondent avec les bords du canevas.</li>
#Reprenez le programme initial. Remplacez la méthode <code>create_line</code> par <code>create_rectangle</code>. Que se passe-t-il ?
▲<li>Ajoutez une fonction <code>drawline2</code> qui tracera deux lignes rouges en croix au centre du canevas : l'une horizontale et l'autre verticale. Ajoutez également un bouton portant l'indication « viseur ». Un clic sur ce bouton devra provoquer l'affichage de la croix.</li>
:Pour chacune de ces méthodes, notez ce qu'indiquent les coordonnées fournies en paramètres.▼
▲Pour chacune de ces méthodes, notez ce qu'indiquent les coordonnées fournies en paramètres.
:*Supprimez la ligne <code>global x1, y1, x2, y2</code> dans la fonction <code>drawline</code> du programme original. Que se passe-t-il ? Pourquoi ?
▲(Remarque : pour le polygone, il est nécessaire de modifier légèrement le programme !)</li>
#Anneaux olympiques :
{{solution}}
<ol>
|