Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Non-Officiels > Programmation > Python > Lecture du tutoriel

Les bases

Avatar
Auteur : cat_loic
Créé : le 16/02/2007 15:25:22
Modifié : le 01/11/2007 00:41:39
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Pour commencer, apprenons les bases :) .
Sommaire du chapitre :
Chapitre précédent Sommaire Chapitre suivant

Les fenêtres

Comme je l'ai dit dans l'introduction, avant d'utiliser les fonctions de Tkinter, il faut importer le module Tkinter.
Nous avons déjà vu le code, c'est celui-ci :
Code : Python
1
from Tkinter import *

C'est bien joli d'importer un module, mais un module ne contient que des fonctions, en quoi Tkinter peut-il créer une fenêtre ?

Tkinter est l'un des modules les plus utilisé quand on veut créer une Interface Graphique (GUI, ou autrement dit, une fenêtre) car ses fonctions permettent de créer des fenêtres, ainsi que ce qui va dedans (boutons, etc...).

Oui, vous avez bien lu, des fonctions qui créent des fenêtres !
Nous allons tout de suite voir cette merveilleuse fonction :
Code : Python
1
Tk()

Comme quoi, on peut pas faire plus court comme nom :p .
Allez, voici un bout de code :
Code : Python
1
2
3
from Tkinter import *
fenetre1 = Tk()
fenetre1.mainloop()

Bon, la première ligne, ça va, on importe toutes les fonctions du module Tkinter.

La deuxième ligne : on a une variable "fenetre1", à laquelle on affecte... Une fonction ?!? o_O
Bah oui, c'est comme ça !
Dans ce cas là, notre variable ne contient pas une valeur, elle contient une "fonction". A ce stade là, on ne l'appelle plus variable, mais objet.
De plus, cette "fonction" change aussi de nom : c'est une classe.
Ainsi, notre objet "fenetre1" contient la classe Tk(), c'est elle qui "crée" la fenêtre.

Enfin, troisième ligne, on a l'objet "fenetre1" suivi d'un point et de la "fonction" mainloop().
Ici aussi, cette "fonction" ne s'appelle plus ainsi, mais méthode.
En quelques mots, la méthode mainloop() crée une boucle sur l'objet qui lui est assigné, dans cette boucle, elle va s'occuper des événements qui se passeront ( événements qui se produiront dans l'objet ). Ces événements peuvent être des clics de souris, un passage de la souris, une touche du clavier pressée, etc...
En résumé, fenetre1.mainloop() s'occupe des événements qui se passent dans la fenêtre.

Le texte

Une fenêtre vide, c'est bien joli, mais c'est toujours mieux avec quelque chose dedans.
Pour commencer à la remplir, que diriez vous d'afficher du texte ?
Oui ? Ok, on y va !

Pour le texte, c'est à peu près le même principe que pour la fenêtre : on prend un objet et on lui affecte une classe, pour le texte, c'est la classe Label() qui est utilisée.

Ici, la classe Label() peut contenir plusieurs arguments (ce sont ses paramètres) : le premier, c'est l'objet dans lequel elle est contenue.
En effet, notre texte ne peut pas apparaître tout seul, dans le vide, il faut bien qu'il soit dans la fenêtre.
Ensuite, elle peut contenir le texte que l'on souhaite afficher (après tout, elle sert à afficher du texte, non ?) et enfin elle peut aussi avoir la couleur du texte.

En fait, Label() permet d'avoir d'autres arguments, comme la police du texte, la couleur de fond du texte, mais ne nous égarons pas.

Voici la structure de notre objet :
Code : Python
1
2
3
4
5
6
from Tkinter import *
 
fenetre1 = Tk()
texte1 = Label(fenetre1, text='texte', fg='red')
texte1.pack()
fenetre1.mainloop()

Ici, cela affichera "texte", en rouge.
Vous remarquerez juste en dessous le texte1.pack().
Ici, nous associons une méthode à notre objet "texte1".
Cette méthode (pack()) permet de gérer l'emplacement de l'objet dans la fenêtre. Elle peut prendre comme argument side= ensuite, on précise l'endroit en majuscule : LEFT, RIGHT, TOP, BOTTOM. Quelque soit la taille de votre fenêtre, votre texte restera collé où vous lui avez dit.

Si vous êtes très pointillieux, vous avez deux autres arguments à votre disposition : "padx" et "pady" leurs valeurs s'expriment en pixel, ils permettent de créer un espacement entre les objets et le reste, ainsi "padx" crée un espacement à gauche et à droite de l'objet et "pady" crée un espacement au dessus et en dessous de l'objet.
Syntaxe :
Code : Python
1
objet.pack(side=BOTTOM, padx=5, pady=1)


Nous avons parlé de couleurs tout à l'heure, nous allons donc faire un petit code qui affichera le nom d'une couleur dans sa propre couleur :
Code : Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# -*- coding: utf-8 -*-
from Tkinter import *
 
fen1 = Tk()
text1 = Label(fen1, text='rouge', fg='red')
text1.pack()
texte1 = Label(fen1, text='rouge foncé', fg='dark red')
texte1.pack()
text2 = Label(fen1, text='cyan', fg='cyan')
text2.pack()
texte2 = Label(fen1, text='cyan foncé', fg='dark cyan')
texte2.pack()
text3 = Label(fen1, text='marron', fg='maroon')
text3.pack()
text4 = Label(fen1, text='vert', fg='green')
text4.pack()
texte4 = Label(fen1, text='vert foncé', fg='dark green')
texte4.pack()
text5 = Label(fen1, text='bleu', fg='blue')
text5.pack()
texte5 = Label(fen1, text='bleu foncé', fg='dark blue')
texte5.pack()
text6 = Label(fen1, text='orange', fg='orange')
text6.pack()
texte6 = Label(fen1, text='orange foncé', fg='dark orange')
texte6.pack()
text7 = Label(fen1, text='jaune', fg='yellow')
text7.pack()
text8 = Label(fen1, text='pourpre', fg='purple')
text8.pack()
text9 = Label(fen1, text='gris', fg='grey')
text9.pack()
texte9 = Label(fen1, text='gris foncé', fg='dark grey')
texte9.pack()
text10 = Label(fen1, text='noir', fg='black')
text10.pack()
text11 = Label(fen1, text='sans')
text11.pack()
fen1.mainloop()

Vous noterez que l'objet "text10" n'a pas de couleur définie, et si vous testez ce code, vous verrez qu'il s'affiche automatiquement en noir.
Pour résumer, voici les couleurs qui ont été employées (je ne vous en donne pas plus, c'est largement suffisant pour le moment. A vous de faire preuve de curiosité et de tester ou chercher d'autres couleurs) : red, dark red, purple, cyan, dark cyan, blue, dark blue, yellow, orange, dark orange, green, dark green, maroon, grey, dark grey (et black, mais bon...)

Je crois qu'on a fait le tour avec le texte.

Si les couleurs ne vous conviennent pas, vous avez la possibilité d'indiquer une couleur précise avec son code Hexadécimal, il suffit de taper entre les guillemets un # suivit du code hexadécimal. Pour apprendre à vous servir du code hexadécimal, venez faire un tour ici (c'est le tuto de M@teo21 sur les sites web, lorsqu'il explique comment utiliser les couleurs, descendez un peu et vous tomberez sur ses explications concernant le-dit code hexadécimal).

Les boutons

Nous allons rendre notre fenêtre intéractive avec des boutons !
Les boutons ne sont pas si différents du texte, la classe utilisée n'est plus Label() mais Button(). Elle peut prendre comme argument l'objet dans lequel elle se trouve ( la fenêtre ), le texte dans le bouton et une action.
Nous allons d'abord voir comment fermer une fenêtre avec un bouton "quitter".
Voici le code :
Code : Python
1
2
3
4
5
6
7
8
from Tkinter import *
 
fenetre1 = Tk()
texte1 = Label(fenetre1, text="Un petit exemple")
texte1.pack(side=TOP)
bouton1 = Button(fenetre1, text="Quitter", command=fenetre1.destroy)
bouton1.pack(side=BOTTOM)
fenetre1.mainloop()

Explications : notre objet "bouton1" est dans la "fenetre1", il y a marqué dedans "Quitter" et lorsqu'on clique dessus (command=) l'objet "fenetre1" est associé à la méthode "destroy", qui efface la fenêtre.
Vous remarquerez qu'en dessous, on associe à l'objet "bouton1" la méthode pack() qui situe notre bouton en bas de la fenêtre.
Même si vous ne souhaitez pas mettre précisément votre objet "texte1" ou "bouton1" dans la fenêtre, vous devez quand même l'associer à la méthode pack(), sans rien mettre entre les parenthèses, afin que l'objet se situe bien dans la fenêtre.


Les boutons sont vraiments pratiques, car ils permettent d'appeler des fonctions...
Des fonctions qui vont permettre : de donner des valeurs à des variables, d'utiliser des conditions, d'afficher du texte...

Pour illustrer tout ceci, je vais vous apprendre à faire un bouton, qui, quand on clique dessus, incrémente une variable, et affiche sa valeur !

Voic le code :
Code : Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# -*- coding: utf-8 -*- 
from Tkinter import *
 
# Définition des variables
global clic
clic = 0
 
# Définition des fonctions
def incremente(valeur):
    "incrémente la variable clic par la valeur"
    global clic
 
    clic = clic + valeur
    chaine1.configure(text = "Nombre de clic =" + str(clic))
 
    if clic > 2:
        chaine2.configure(text = "Vous avez dépassé 2 clics, ça fera 100 euros :p")
    
# Programme principal
fenetre1 = Tk()
texte1 = Label(fenetre1, text="Un petit exemple")
texte1.pack(side=TOP)
bouton1 = Button(fenetre1, text="augmenter", command=(lambda: incremente(1)))
bouton1.pack(side=BOTTOM)
bouton2 = Button(fenetre1, text="Quitter", command=fenetre1.destroy)
bouton2.pack(side=BOTTOM)
chaine1 = Label(fenetre1)
chaine1.pack()
chaine2 = Label(fenetre1)
chaine2.pack()
fenetre1.mainloop()

Les deux premières lignes sont faciles à comprendre.
Ensuite nous définissons les variables : global est là pour déclarer la variable "clic", puis nous mettons "clic" à 0.

Nous définissons ensuite les fonctions qui seront utilisées (ici, une seule fonction)
def definie la fonction "incremente" qui pourra avoir comme argument la variable "valeur".
Dans cette fonction rien de compliqué jusqu'à :
Code : Python
1
chaine1.configure(text = "Nombre de clic =" + str(clic))


J'explique cette ligne : nous associons à l'objet "chaine1" la méthode configure(). Celle-ci permettra d'afficher du texte !
Ainsi, la méthode configure() prend pour argument le texte "Nombre de clic =", auquel on veut ajouter la valeur de la variable "clic", on transforme donc "clic" en texte (puisqu'on veut afficher du texte) grâce à la fonction str().

Ensuite la condition devient tout de suite plus claire.

Enfin, on passe au programme principal :
Le début, vous connaissez déjà.
Pour cette ligne :
Code : Python
1
bouton1 = Button(fenetre1, text="augmenter", command=(lambda: incremente(1)))

la commande appelle la fonction incremente(), celle-ci prend la valeur 1 ( d'où notre variable "valeur" ). Le plus compliqué est lambda: .
C'est une fonction qui permet d'en créer une autre, ici je m'en sers pour "appeler" la fonction incremente() tout en lui donnant un argument (ici, une valeur : 1)

Enfin, après les boutons, nous déclarons les objets "chaine1" et "chaine2" afin qu'ils existent dans la fenêtre.

Voilà, tout ce que vous devez à peu près savoir pour continuer ;) .

Le point sur les objets, classes, etc...

En apprenant les bases, on a appris beaucoup de choses, notamment l'existence d'objets, de classes, etc...
Afin que tout soit clair et que rien ne s'embrouille, nous allons faire le point là dessus, en faisant la différence entre les variables, les valeurs, les objets, les arguments, les fonctions les classes et les méthodes :) .

Tout ceci fait partie de la Programmation Orienté Objet (Def. POO), vous pouvez avoir un aperçu dans le cours de M@teo21 sur le C/C++ ici.
De toute façon, comme je vous l'ai expliqué dans l'introduction, nous verrons ce concept en temps voulu :) .


Et voilà !

Maintenant, les bases acquises. Nous pouvons commencer la réalisation du script.
Chapitre précédent Sommaire Chapitre suivant
Auteur : cat_loic
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 453 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.051s (0.0374s)