Activité 10 : MINIS PROJETS AVEC LA FENETRE GRAPHIQUE

Transcription

Activité 10 : MINIS PROJETS AVEC LA FENETRE GRAPHIQUE
Activité 10 : MINIS PROJETS AVEC LA FENETRE GRAPHIQUE tkinther
MANIPULATION COULEURS ET TEXTE
Classe de Terminale S – Spécialité ISN
1 – LES COULEURS
Actuellement les écrans d’ordinateur savent afficher 16 millions de couleurs.
Il existe différentes solutions pour décrire une couleur. Celle qui va nous intéresser est le système RGB (RVB en français). En
utilisant le principe de superposition additive des couleurs, on peut recréer toutes les couleurs.
Les proportions de rouge, vert et bleu ne sont pas données en pourcentage mais par un nombre entier entre 0 et 255. C’est un
entier codé sur un octet.
 Le codage en python.
Le module tkinter donne un certain nombre de couleurs sous forme de chaîne de caractères parmi lesquelles : black,
white, red, yellow, blue….
Si on souhaite une couleur personnalisée on peut préciser le couleur que l’on souhaite en utilisant le code HTML de la couleur
désirée.
Le code d’une couleur est composée d’une chaîne de caractère avec :
 Un symbole # pour commencer.
 2 symboles correspondant au niveau de rouge codé en hexadécimal
 2 symboles correspondant au niveau de vert codé en hexadécimal
 2 symboles correspondant au niveau de bleu codé en hexadécimal
Par exemple, en saisissant : Label (fenetre, text= ‘coucou ‘, bg=’#18BFA8’, fg=’red’)
On obtient un Label où il est écrit « coucou » en rouge sur fond vert.
 EXERCICE.
1 – Réaliser une fonction RVB2HTML qui :
Attend pour paramètre d’entrée 3 nombres entiers r, v, b entre 0 et 225
Renvoie une chaîne de caractère correspondant à la couleur (r, v, b) entrée.
Attention, le code HTML d’une couleur doit comporter forcément 7 caractères (il faut ajouter des « 0 » le cas échéant)
2 – Réaliser un bandeau de dégradé entre 2 couleurs tirées au hasard.
3 – Adapter l’exercice précédent pour réaliser un canvas carré de 400x400 pixels, un dégradé circulaire.
2 – LE TEXTE : POLICE DE CARACTERE.
La plupart des polices de caractères affichées sur un ordinateur sont des polices vectorielles, c’est-à-dire que le dessin du
caractère n’est pas comme une photo numérique par un certain nombre de pixels, mais à l’aide de lignes courbes et droites.
Ainsi, on peut en théorie zoomer sur une lettre à l’infini.
Avec python, lors de la création d’un Label ou d’un texte sur un canvas on peut, comme on l’a vu, préciser une police de
caractère à l’aide de l’option font sous la forme d’un triplet de cette manière : font = (famille, taille, decoration)
Famille : une chaîne de caractère indiquant le nom de la police. Les valeurs les plus compatbles d’un ordinateur à un autre et
d’un système d’exploitation à un autre sont les suivantes : Arial, Helvetica, Courier New, Courier, Comic Sans MS, Fixedsys, MS
Sans Serif, MS Serif, Symbol, system, Tmes New Roman, Times, Verdana.
On peut utiliser d’autres noms de polices installées sur son propre ordinateur, mais on prend le risque qu’un autre ordinateur ne
possède pas la police, ce qui donnera des affichages très exotiques.
Taille : un entier qui indique la taille du texte comme on le trouve dans les traitements de texte. C’est optionnel.
Décoration : on peut préciser, dans une chaîne de caractères comportant des mots clés séparés par des espaces, un certain
nombre d’informations sur la mise en forme du texte :
Mot-clé
Signification
normal
Normal
bold
Gras
italic
Italique
underline
Souligné
overstrike
Barré
Exemple :
Fond.create_text(500, 100, text=’coucou’, font = (‘Times’, 16, ‘bold, underline))
On place le texte “coucou” sur le canvas Fond en gras et souligné.
EXERCICE.
Réaliser une animation du texte « SALUT LES ELEVES » en rouge, sur 2 lignes, sur fond jaune provenant du fond de l’écran en
effectuant un zoom.
_____________________________________________________________________________________________________________________
Année scolaire 2014-2015 – Lycée « Cordeliers-Victoire » DINAN – Enseignement de Spécialité ISN – Mardi 27 Janvier - © Doc. A. ROBERT
1
3 – DES WIDGETS TKINTER.
Il existe 15 classes de base pour les widgets tkinter :
Widget
Description
Button
Un bouton classique, à utiliser pour provoquer l'exécution d'une commande quelconque.
Canvas
Un espace pour disposer divers éléments graphiques. Ce widget peut être utilisé pour dessiner, créer
des éditeurs graphiques, et aussi pour implémenter des widgets personnalisés.
Checkbutton
Une « case à cocher » qui peut prendre deux états distincts (la case est cochée ou non). Un clic sur
ce widget provoque le changement d'état.
Entry
Un champ d'entrée, dans lequel l'utilisateur du programme pourra insérer un texte quelconque à
partir du clavier.
Frame
Une surface rectangulaire dans la fenêtre, où l'on peut disposer d'autres widgets. Cette surface peut
être colorée. Elle peut aussi être décorée d'une bordure.
Label
Un texte (ou libellé) quelconque (éventuellement une image).
Listbox
Une liste de choix proposés à l'utilisateur, généralement présentés dans une sorte de boîte. On peut
également configurer la Listbox de telle manière qu'elle se comporte comme une série de « boutons
radio » ou de cases à cocher.
Menu
Un menu. Ce peut être un menu déroulant attaché à la barre de titre, ou bien un menu « pop up »
apparaissant n'importe où à la suite d'un clic.
Menubutton
Un bouton-menu, à utiliser pour implémenter des menus déroulants.
Message
Permet d'afficher un texte. Ce widget est une variante du widget Label, qui permet d'adapter
automatiquement le texte affiché à une certaine taille ou à un certain rapport largeur/hauteur.
Radiobutton
Représente (par un point noir dans un petit cercle) une des valeurs d'une variable qui peut en
posséder plusieurs. Cliquer sur un « bouton radio » donne la valeur correspondante à la variable, et
"vide" tous les autres boutons radio associés à la même variable.
Scale
Vous permet de faire varier de manière très visuelle la valeur d'une variable, en déplaçant un
curseur le long d'une règle.
Scrollbar
« ascenseur » ou « barre de défilement » que vous pouvez utiliser en association avec les autres
widgets : Canvas, Entry, Listbox, Text.
Text
Affichage de texte formaté. Permet aussi à l'utilisateur d'éditer le texte affiché. Des images peuvent
également être insérées.
Toplevel
Une fenêtre affichée séparément, « par-dessus ».
Ces classes de widgets intègrent chacune un grand nombre de méthodes. On peut aussi leur associer (lier) des événements,
comme nous venons de le voir dans les pages précédentes. Vous allez apprendre en outre que tous ces widgets peuvent être
positionnés dans les fenêtres à l'aide de trois méthodes différentes : la méthode grid(), la méthode pack() et la méthode place().
L'utilité de ces méthodes apparaît clairement lorsque l'on s'efforce de réaliser des programmes portables (c'est-à-dire
susceptibles de fonctionner indifféremment sur des systèmes d'exploitation aussi différents que Unix, MacOS ou Windows), et
dont les fenêtres soient redimensionnables.
4 – DES RAPPELS
 Le widget Canvas
Le module tkinter dispose d’un widget nommé Canvas destiné à dessiner la fenêtre. Si on veut créer un canvas nommé
canv, l’appel se fait comme pour tous les widgets de la manière suivante :
canv=Canvas(emplacement, options)
où emplacement est le nom de la fenêtre sur laquelle il est déposé et options indique les différentes propriétés du Canvas
comme
Options
Effet
bg
Couleur du fond du Canvas
Hauteur et largeur du Canvas (en pixels)
height - width
 Dessiner sur le Canvas
Sur un Canvas ici noté C, on peut dessiner différents types d’objets que l’on appelle item.
Une ligne : ligne = C.create_line(x1,y1,x2,x2,options) dessine un segment reliant le point de coordonnées (x1,y1)en haut à
gauche inclus et point (x2,y2) en bas à droite.
Options
Effet
width
Epaisseur de la ligne en pixels
fill
Couleur de la ligne
_____________________________________________________________________________________________________________________
Année scolaire 2014-2015 – Lycée « Cordeliers-Victoire » DINAN – Enseignement de Spécialité ISN – Mardi 27 Janvier - © Doc. A. ROBERT
2
Un rectangle : rect = C.create_rectangle(x1,y1,x2,x2,options) dessine un rectangle dont deux sommets opposés ont pour
coordonnées (x1,y1)en haut à gauche et point (x2,y2) en bas à droite.
Options
Effet
width
Epaisseur du trait en pixels
fill
Couleur à l’intérieur du rectangle
outline
Couleur du trait
Une ellipse ou une cercle rectangle : el = C.create_oval (x1,y1,x2,x2,options) dessine une ellipse dans un rectangle imaginaire
dont deux sommets opposés ont pour coordonnées (x1,y1)en haut à gauche et point (x2,y2) en bas à droite.
Options
Effet
width
Epaisseur du trait en pixels
fill
Couleur à l’intérieur du rectangle
outline
Couleur du trait
Un texte dans un Canvas : txt = C.create_text (x,y,options) affiche un texte aux coordonnées (x,y).
Options
anchor
Effet
Précise la position d’attache du texte par rapport au point de coordonnées (x,y). par
défaut, le texte est centré autour du point indiqué (’center’). Il peut prendre les valeurs
‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw, ‘w’, ‘nw’, ou ‘center’ (par défaut).
Couleur du texte
Police de caractère utilisée (comme pour le widget Label)
Une chaîne de caractère contenant le texte à afficher
fill
font
text
Exemples :
Fond = Canvas(fenetre,width=800, height=40, bg=’black’)
Fond.create_line(200, 300, fil=’green’)
Fond.create_oval(20,20, 40,40, fill=’blue’)
2 - Réalisation du jeu du « bonneteau »
Cette application doit permettre de :

Deux gobelets côte à côte.

A chaque fois que l’on clique sur le bouton « ECHANGER », on réalise une animation : on inverse le gobelet de gauche
noté « A » avec le gobelet de droite noté « B » en faisant glisser celui de gauche derrière celui de droite.
3 – Quelques aides.
 Charger une image.
a) On charge l’image dans une variable globale (ici fichierimg) à l’aide de la commande :
fichierimg = PhotoImage(file=’image.gif’) (si le fichier se nomme ‘image.gif’ qui doit être placé dans le répertoire
des scripts)
b) On place l’image au point de coordonnées x,y sur le Canvas C avec la méthode : img = C.create_image(x,y,options)
Le paramètre options permet de renseigner les propriétés. Par exemple :
Options
Effet
anchor
Comme pour l’objet text, indique la position du point de références (x,y) par rapport au
reste de l’image. Il peut prendre les valeurs ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw,
‘w’, ‘nw’, ou ‘center’ (par défaut).
image
Indique l’image à afficher (fichierimg dans l’exemple ci-dessus)

Diverses méthodes sur le widget Canvas permettent de modifier les propriétés des items placés.
méthode
Effet
C.delete(item)
Efface l’item item du canvas C.
C.delete (ALL)
Efface tout ce qui se trouve sur le canvas C.
C.coords(item, x,y)
Modifie les coordonnées de l’item item (2 ou 4 selon l’objet)
Ccoords(item, x1, y1, x2,
y2)
C.itemconfig(item, options)
Permet de modifier une ou plusieurs options de l’item item
C.itemcget (item,prop)
Renvoie la valeur de la propriété prop de l’item item
Si on souhaite modifier plusieurs options d’un coup, on sépare les propriétés par une virgule.
Exemple : C.itemconfig(titre, text= «gagné », fill= « red »), transforme le contenu du texte « Titre » sur le Canvas C en « Gagné »
écrit en « Rouge ».
Rappels encore.
Options
row=…
column=…
Effet
Indique respectivement le numéro de ligne et de colonne (la numérotation
commence à 0)
_____________________________________________________________________________________________________________________
Année scolaire 2014-2015 – Lycée « Cordeliers-Victoire » DINAN – Enseignement de Spécialité ISN – Mardi 27 Janvier - © Doc. A. ROBERT
3
rowspan=…
columnspan=…
padx=…
pady=…
sticky=…
Indique respectivement le nombre de lignes et de colonnes qu’occupe un widget (1
par défaut)
Indique respectivement les distances minimales horizontale et verticales entre le
widget et les bords de la grille (permet d’aérer la fenêtre).
Indique quel côté du widget est collé à la grille (centré par défaut). Les valeurs
possible sont : ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw, ‘w’, ‘nw’, ou
‘center’ (par défaut). Ce sont les points cardinaux.
Fen.resizable(width=False)
Empêche le redimensionnement (respectivement en largeur et en hauteur) de la
Fen.resizable(height=False) fenêtre Fen.
On peut placer les deux arguments dans les parenthèses en les séparant par une
virgule pour n’utiliser qu’une seule ligne.
Fen.place(x,y)
Place l’objet créé aux coordonnées souhaitées.
Attention, dans un programme, on fait le choix d’utiliser la méthode grid ou place, mais on ne mélange pas les deux
méthodes. La méthode place a un inconvénient car parfois, les bordures de la fenêtre ou l’épaisseur des butons ne sont pas
identiques d’un ordinateur à l’autre ou d’une version d’un système d’exploitation à une autre.
_____________________________________________________________________________________________________________________
Année scolaire 2014-2015 – Lycée « Cordeliers-Victoire » DINAN – Enseignement de Spécialité ISN – Mardi 27 Janvier - © Doc. A. ROBERT
4

Documents pareils