Différences entre les versions de « Programmation Python/Utilisation de fenêtres et de graphismes »

m
Robot : Changement de type cosmétique
(pas celle la)
m (Robot : Changement de type cosmétique)
Si vous ne le saviez pas encore, apprenez dès à présent que le domaine des interfaces graphiques (ou ''GUI : Graphical User Interface'') est extrêmement complexe. Chaque système d'exploitation peut en effet proposer plusieurs « bibliothèques » de fonctions graphiques de base, auxquelles viennent fréquemment s'ajouter de nombreux compléments, plus ou moins spécifiques de langages de programmation particuliers. Tous ces composants sont généralement présentés comme des ''classes d'objets'', dont il vous faudra étudier les ''attributs'' et les ''méthodes''.
 
Avec Python, la bibliothèque graphique la plus utilisée jusqu'à présent est la bibliothèque ''Tkinter'', qui est une adaptation de la bibliothèque ''Tk'' développée à l'origine pour le langage ''[[Tcl]]''. Plusieurs autres bibliothèques graphiques fort intéressantes ont été proposées pour Python : ''wxPython'', ''pyQT'', ''pyGTK'', etc. Il existe également des possibilités d'utiliser les bibliothèques de ''widgets Java'' et les ''MFC'' de ''Windows''.
 
Dans le cadre de ces notes, nous nous limiterons cependant à ''Tkinter'', dont il existe fort heureusement des versions similaires (et gratuites) pour les plates-formes Linux, Windows et Mac.
Ce processus d'''instanciation d'un objet à partir d'une classe'' est une opération fondamentale dans les techniques actuelles de programmation. Celles-ci font en effet de plus en plus souvent appel à une méthodologie que l'on appelle ''programmation orientée objet'' (ou ''OOP : Object Oriented Programming'').
 
La ''classe'' est en quelque sorte un modèle général (ou un moule) à partir duquel on demande à la machine de construire un ''objet'' informatique particulier. La classe contient toute une série de définitions et d'options diverses, dont nous n'utilisons qu'une partie dans l'objet que nous créons à partir d'elle. Ainsi la classe <code>Tk()</code> , qui est l'une des classes les plus fondamentales de la bibliothèque ''Tkinter'', contient tout ce qu'il faut pour engendrer différents types de fenêtres d'application, de tailles ou de couleurs diverses, avec ou sans barre de menus, etc.
 
Nous nous en servons ici pour créer notre objet graphique de base, à savoir la fenêtre qui contiendra tout le reste. Dans les parenthèses de <code>Tk()</code>, nous pourrions préciser différentes options, mais nous laisserons cela pour un peu plus tard.
 
L'instruction d'instanciation ressemble à une simple affectation de variable. Comprenons bien cependant qu'il se passe ici deux choses à la fois :
*''la création d'un nouvel objet'', (lequel peut être complexe et donc occuper un espace mémoire considérable)
*''l'affectation d'une variable'' qui va désormais servir de référence pour manipuler l'objet<ref>Cette concision du langage est une conséquence du typage dynamique des variables en vigueur sous Python. D'autres langages utilisent une instruction particulière (telle que <code>new</code>) pour instancier un nouvel objet. Exemple :<br />
<code>maVoiture = new Cadillac</code> (instanciation d'un objet de classe <code>Cadillac</code>, référencé dans la variable <code>maVoiture</code>) </ref>.</li>
 
<li>A la troisième ligne : <code>tex1 = Label(fen1, text='Bonjour tout le monde !', fg='red')</code>, nous créons un autre objet (un ''widget''), cette fois à partir de la classe <code>Label()</code>.
 
* Les deux arguments suivants servent à préciser la forme exacte que doit prendre notre ''widget''. Ce sont en effet deux ''options'' de création, chacune fournie sous la forme d'une chaîne de caractères : d'abord le texte de l'étiquette, ensuite sa couleur d'avant-plan (ou ''foreground'', en abrégé <code>fg</code>). Ainsi le texte que nous voulons afficher est bien défini, et il doit apparaître coloré en rouge.<br />
Nous pourrions encore préciser bien d'autres caractéristiques : la police à utiliser, ou la couleur d'arrière-plan, par exemple. Toutes ces caractéristiques ont cependant une valeur par défaut dans les définitions internes de la classe <code>Label()</code>. Nous ne devons indiquer des options que pour les caractéristiques que nous souhaitons différentes du modèle standard.</li>
 
<li>À la quatrième ligne de notre exemple : <code>tex1.pack()</code> , nous activons une ''méthode'' associée à l'objet <code>tex1</code> : la méthode <code>pack()</code>. Nous avons déjà rencontré ce terme de ''méthode'' (à propos des listes, notamment). Une méthode est une fonction intégrée à un objet (on dira aussi qu'elle est ''encapsulée'' dans l'objet). Nous apprendrons bientôt qu'un objet informatique est en fait un morceau de programme contenant toujours :
Un tel événement peut être une action quelconque de l'utilisateur : déplacement de la souris, appui sur une touche, etc., mais aussi un événement externe ou un automatisme (top d'horloge, par ex.)
 
Lorsqu'il détecte un événement, le réceptionnaire envoie un message spécifique au programme<ref>Ces messages sont souvent notés WM (''Window messages'') dans un environnement graphique constitué de fenêtres (avec de nombreuses zones réactives : boutons, cases à cocher, menus déroulants, etc.). Dans la description des algorithmes, il arrive fréquemment aussi qu'on confonde ces messages avec les événements eux-mêmes.</ref>, lequel doit être conçu pour réagir en conséquence.
 
La phase d'initialisation d'un programme utilisant une interface graphique comporte un ensemble d'instructions qui mettent en place les divers composants interactifs de cette interface (fenêtres, boutons, cases à cocher, etc.). D'autres instructions définissent les messages d'événements qui devront être pris en charge : on peut en effet décider que le programme ne réagira qu'à certains événements en ignorant tous les autres.
On écrit d'abord le nom de l'objet sur lequel on désire intervenir, puis le point (qui fait office d'opérateur), puis le nom de la méthode à mettre en œuvre ; entre les parenthèses associées à cette méthode, on indique enfin les arguments qu'on souhaite lui transmettre.
 
=== Exemple graphique : détection et positionnement d'un clic de souris ===
 
Dans la définition de la fonction « evaluer » de l'exemple précédent, vous aurez remarqué que nous avons fourni un argument event (entre les parenthèses).
12 783

modifications