94
C. Aperghis-Tramoni Département d’Informatique 1 Le domaine des interfaces graphiques GUI (Graphical User Interface) est extrêmement varié. Chaque système d'exploitation propose plusieurs "librairies" de fonctions graphiques de base, auxquelles viennent s'ajouter des compléments, plus ou moins spécifiques liés aux langages de programmation. Ces composants sont présentés comme des classes d'objets, dont il faut définir les attributs et les méthodes. Python utilise la librairie graphique Tkinter, une adaptation de la librairie Tk développée à l'origine pour le langage Tcl. Il existe d'autres librairies graphiques, wxPython étant la plus généraliste. L'interface graphique. C. Aperghis-Tramoni C. Aperghis-Tramoni

L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique1

Le domaine des interfaces graphiques GUI (Graphical User Interface) estextrêmement varié.Chaque système d'exploitation propose plusieurs "librairies" de fonctionsgraphiques de base, auxquelles viennent s'ajouter des compléments, plus oumoins spécifiques liés aux langages de programmation.Ces composants sont présentés comme des classes d'objets, dont il faut définirles attributs et les méthodes.Python utilise la librairie graphique Tkinter, une adaptation de la librairie Tkdéveloppée à l'origine pour le langage Tcl.Il existe d'autres librairies graphiques, wxPython étant la plus généraliste.

L'interface graphique.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 2: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique2

Premiers pas en Tkinter.

Supposant que le module Tkinter est installé, pour l'utiliser dans un scriptPython, il est indispensable de l'importer.

from Tkinter import *

Le premier script consistera simplement en une fenêtre qui contient un boutonet un message.

#!/usr/bin/pythonfrom Tkinter import *fen1 = Tk()Label(fen1, text='Bonjour tout le monde !').pack()Button(fen1, text='Quitter', command = fen1.destroy).pack()fen1.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 3: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique3

Autre manière.

#!/usr/bin/pythonfrom Tkinter import *fen1 = Tk()texte = Label(fen1, text='Bonjour tout le monde !')bouton = Button(fen1, text='Quitter', command = fen1.destroy)texte.pack()bouton.pack()fen1.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 4: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique4

Ajouter de la couleur.

#!/usr/bin/pythonfrom Tkinter import *fen1 = Tk()texte = Label(fen1, text='Bonjour tout le monde !', fg='blue', bg = 'orange')bouton = Button(fen1, text='Quitter', command = fen1.destroy)texte.pack()bouton.pack()fen1.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 5: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique5

Explication.

Le programme déclare une fenêtre qui contiendra l'ensemble des objets (widgets)fen1 = Tk()

A cette fenêtre seront attachés deux objets.Un label

Label(fen1, text='Bonjour tout le monde !')Un bouton

Button(fen1, text='Quitter', command = fen1.destroyLes objets, pour être visibles doivent être mis en place, c'est ce que fait la méthode

pack()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 6: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique6

Contrôle de la fenêtre.

On peut spécifier dans quelles limites la fenêtre quivient d'être créée pourra être contrôlée par l'utilisateur.

#!/usr/bin/pythonfrom Tkinter import *fen1 = Tk()fen1.title("Toplevels")fen1.maxsize(width=300, height=200)fen1.minsize(width=150, height=100)fen1.resizable(width=YES, height=NO)texte = Label(fen1, text='Bonjour tout le monde !', fg='blue', bg = 'orange')bouton = Button(fen1, text='Quitter', command = fen1.destroy)texte.pack()bouton.pack()fen1.mainloop()

X.maxsize (width= , height= ) : Taille maximale autorisée.X.minsize (width= , height= ) : Taille minimale autorisée.X.resisable (width= [YES / NO] , height= [YES / NO] ) : Autorisation de redimentionnement.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 7: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique7

Un mot sur la programmation objet.

Nous avons vu qu'il n'était pas très compliqué de construire un modules Python, quicontiendra un script, des définitions de fonctions et classes d'objets.Tout ou partie de ces modules peut être importé dans un programme ou en modeinteractif dans l'interpréteur.La ligne

from Tkinter import *Importe toutes les classes contenues dans le module Tkinter.Les classes sont des modèles d'objets, lesquels sont des morceaux de programmesréutilisables dans d'autres contextes.C'est ainsi que la ligne

fen1 = Tk()Créée une instance de la classe Tk() qui sera le premier objet que nous utiliserons, unefenêtre appelée fen1.

En fin de compte, la classe est un moule à partir duquel on construit un objet particulier.Elle contient une série de définitions et d'options diverses, dont nous n'utilisons que leséléments qui nous intéressent dans l'objet que nous créons à partir d'elle.

La classe Tk() est l'une des classes fondamentales de la librairie Tkinter et elle contienttout ce est nécessaire pour engendrer différents types de fenêtres et définir leurscaractéristiques (taille, couleur, barre de menus…).

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 8: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique8

Options du label.

Option Type Fonction

text chaîne Texte affiché dans le libellé, sur une ou plusieurs lignes. Si les options"bitmap" ou "image" sont spécifiées, cette option est ignorée.

bitmap bitmap "Bitmap" à afficher dans le widget Label. Si l'option "image" estspécifiée, cette option est ignorée.

image image Image affichée dans le widget Label. Si cette option est précisée, elleprend le dessus sur les options "text" et "bitmap".

justify constante Justification du texte.(LEFT, RIGHT ou CENTER).

anchor constante Situation du texte ou de l'image dans le libellé.N, NE, E, SE, S, SW, W, NW, ou CENTER (par défaut).

wraplength écartement Détermine quand le texte du libellé doit être coupé. Cette option estdonnée en unités d'écran. Par défaut, affichage sur une seule ligne.

textvariable variable Associe une variable Tkinter (généralement StringVar) au libellé. Si lavariable est modifiée, le texte du libellé est mis à jour.

underline entier Précise quel caractère est souligné dans le texte. -1 (par défaut)signifie qu'aucun n'est souligné.C. A

perg

his-

Tram

oni

C. Ape

rghi

s-Tra

mon

i

Page 9: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique9

Option bitmap.

L'option bitmap permet de remplacer le texte par un pictogrammeon dispose de plusieurs prédéfinitions :error, gray75, gray50, gray25, gray12, hourglass, info, questhead, question, warning.

from Tkinter import *Fp = Tk()Fp.title("Quelques bitmaps.")Label(Fp,text="questhead").pack()Label(Fp,bitmap="questhead").pack()Label(Fp,text="hourglass").pack()Label(Fp,bitmap="hourglass").pack()Label(Fp,text="warning").pack()Label(Fp,bitmap="warning").pack()Label(Fp,text="error").pack()Label(Fp,bitmap="error").pack()Button(Fp, text="Quiter", command = Fp.destroy).pack()

Fp.mainloop()C. A

perg

his-

Tram

oni

C. Ape

rghi

s-Tra

mon

i

Page 10: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique10

Coupure du texte.

from Tkinter import *Fp = Tk()Fp.title("wraplength.")Label(Fp,text="Soyez les bienvenus a l'Institut de technologie du Cambodge.", wraplength="100", justify="left").pack()

Button(Fp, text="Quiter", command = Fp.destroy).pack()

Fp.mainloop()

C'est l'option wraplength qui va permettre de préciser la taille des lignes du texte.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 11: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique11

Action sur un widget.

Affichage d'un message par action sur un bouton.

from Tkinter import *def info(): lab = Label(Fp,text="Bienvenue à l'ITC.").pack()Fp = Tk()Button(Fp,text="Info",command=info).pack()Button(Fp, text='Quitter', command = Fp.destroy).pack()

Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 12: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique12

Souligner un caractère.

L'option underline permet de souligner l'un des caractères de la chaîne affichéedans le bouton.Le caractère est repéré par son rang.Les caractères sont numérotés à partir de zéro.

#!/usr/bin/pythonfrom Tkinter import *Fp = Tk()Fp.title("Souligner." )Label(Fp, text='Bonjour tout le monde !').pack()Button(Fp, text='Quitter', command = Fp.destroy, underline = 0).pack()Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 13: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique13

Options du bouton.

Option Type Fonction

text chaîne Texte affiché dans le libellé, sur une ou plusieurs lignes. Si les options"bitmap" ou "image" sont spécifiées, cette option est ignorée.

bitmap bitmap "Bitmap" à afficher dans le widget. Si l'option "image" est spécifiée,cette option est ignorée.

image appel Image affichée dans le widget Label. Si cette option est précisée, elleprend le dessus sur les options "text" et "bitmap".

command constante Méthode appelée quand le bouton est appuyé.

anchor constante Position du texte ou de l'image dans le bouton. N, NE, E, SE, S, SW, W,NW, ou CENTER (par défaut).

wraplength écartement Détermine quand le texte du libellé doit être coupé. Cette option estdonnée en unités d'écran. Par défaut, affichage sur une seule ligne.

textvariable variable Associe une variable Tkinter (généralement StringVar) au libellé. Si lavariable est modifiée, le texte du libellé est mis à jour.

underline entier Précise quel caractère est souligné dans le texte. -1 (par défaut)signifie qu'aucun n'est souligné.C. A

perg

his-

Tram

oni

C. Ape

rghi

s-Tra

mon

i

Page 14: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique14

Options du bouton.

Option Type Fonctiondisableforeground couleur Couleur du texte ou de l'image quand le bouton est

inaccessible. La couleur de fond est inchangée..

justify constante Définit la façon d'aligner plusieurs lignes de texte (LEFT, RIGHTou CENTER).

padx, pady distance Marges horizontale (padx) et verticale (pady) entre le texte oul'image et le cadre du bouton..

state constante Etat du bouton : NORMAL (par défaut), ACTIVE ou DISABLED.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 15: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique15

Relief et cadre.

L'option "relief" détermine le type de bordure qui va encadrer le widget.Les choix sont : flat, groove, raised, ridge, solid et sunken,

L'option "borderwidth " (bd en abrégé) indique le largeur de la bordure en question.

from Tkinter import *Fp = Tk()

Button(Fp, text='Quitter', command = Fp.destroy).pack()Button(Fp, text='Flat', relief="flat", borderwidth=5).pack(side='left')Button(Fp, text='Groove', relief="groove", borderwidth=5).pack(side='left')Button(Fp, text='Raised', relief="raised", borderwidth=5).pack(side='left')Button(Fp, text='Ridge', relief="ridge", borderwidth=5).pack(side='left')Button(Fp, text='Solid', relief="solid", borderwidth=5).pack(side='left')Button(Fp, text='Sunken', relief="sunken", borderwidth=5).pack(side='left')Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 16: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique16

Mise en forme du texte.

L'option "justify" permet de spécifier le type de justification que l'on souhaite voirappliquer sur le widget : center, left ou right.

L'option "font" permet quant à elle d'indiquer quelle police on souhaite utiliser, quelle serasa taille et sa typographie.

font = (‘Nom, Taille, ‘typographie)

from Tkinter import *Fp = Tk()

Button(Fp, text='Quitter', command = Fp.destroy).pack()Label(Fp, text="Quel est votre texte ?", font = ("Arial", 12,"bold","italic")).pack()Entry(Fp, justify = CENTER, relief="sunken", borderwidth=5).pack()Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 17: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique17

Les curseurs.

Il existe un widget pour modifier l'aspect du curseur lorsque la souris passe dessus.Cette option peut être utilisée avec n'importe quel widget, fenêtre ou cadre.Le chois de curseur est vaste, il en existe une centaine.

from Tkinter import *Fp = Tk()Fp.configure(cursor="hand1")

cursor_list =["diamond_cross","gobbler","gumby","heart","man","pirate","sailboat",

"shuttle","spider","spraycan","top_tee","trek","umbrella","watch"]

for cursor in cursor_list: Button(Fp, text = cursor, cursor = cursor).grid(sticky = EW)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 18: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique18

La liste des curseurs.

X_cursorarrowbased_arrow_downbased_arrow_upboatbogositybottom_left_cornerbottom_right_cornerbottom_sidebottom_teebox_spiralcenter_ptrcircleclockcoffee_mugcrosscross_reversecrosshairdiamond_crossdotdotboxdouble_arrowdraft_largedraft_smalldraped_boxexchange

fleurgobblergumbyhand1hand2hearticoniron_crossleft_ptrleft_sideleft_teeleftbuttonll_anglelr_anglemanmiddlebuttonmousepencilpirateplusquestion_arrowright_ptrright_sideright_teerightbuttonrtl_logo

sailboatsb_down_arrowsb_h_double_arrowsb_left_arrowsb_right_arrowsb_up_arrowsb_v_double_arrowshuttlesizingspiderspraycanstartargettcrosstop_left_arrowtop_left_cornertop_right_cornertop_sidetop_teetrekul_angleumbrellaur_anglewatchxterm

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 19: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique19

Activation.

Il est possible d'animer le bouton au moment ou il est activé.

#!/usr/bin/pythonfrom Tkinter import *Fp = Tk()Fp.title("Animation." )Label(Fp, text='Bonjour tout le monde !').pack()Button(Fp, text='Animation', background='lightblue', foreground='red', activebackground='lightgreen',activeforeground='blue').pack()Button(Fp, text='Quitter', command = Fp.destroy, underline = 0).pack()Fp.mainloop() C. A

perg

his-

Tram

oni

C. Ape

rghi

s-Tra

mon

i

Page 20: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique20

La zone de saisie.

Ce widget permet la saisie d'un texte.

from Tkinter import *Fp = Tk()

saisie=StringVar()

Label(Fp,textvariable=saisie,width=30,fg="blue").pack()Entry(textvariable=saisie,width=30).pack()Button(Fp, text='Quitter', command = Fp.destroy).pack()Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 21: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique21

Masquer le texte.

Il est possible de masquer le texte qui est saisi au moyen de la commande "show"show = "X"

Remplacera tous les caractères par des "X".

from Tkinter import *Fp = Tk()

saisie=StringVar()

Label(Fp,text="Quel est votre mot de passe?", width=30,fg="blue").pack()Entry(textvariable=saisie,width=30, show = "x").pack()Button(Fp, text='Quitter', command = Fp.destroy).pack())Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 22: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique22

La zone texte.

Ce widget est utilisé pour afficher des documents texte simples ouformatés On peut utiliser diverses polices de caractères ou mises en forme.Il peut aussi servir pour réaliser un éditeur de texte.

from Tkinter import *

def info(): texte.insert(END,"Soyez les bienvenus a l'ITC.\n")Fp=Tk()texte=Text(Fp, width=40, height=5)texte.pack()texte.insert(END,"Bonjour tout le monde.\n")Button(Fp,text="Info", command=info).pack()Button(Fp, text='Quitter', command = Fp.destroy).pack()

Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 23: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique23

Les barres de défilement.

Chaque fois qu'un teste est trop important pour être affiché dans la partievisible de la fenêtre, il est possible de l'associer avec une barre de défilementpour pouvoir le parcourir.Associer une barre de défilement à un widget nécessite deux opérations.

Associer le widget yscrollcommand et l'objet qu'il va contrôler aumoyen de la méthode set.

Associer le déroulement a la méthode yview de l'objet.

from Tkinter import *Fp = Tk()Barrey = Scrollbar(Fp)Barrey.pack(side=RIGHT, fill=Y)def info(): texte.insert(END,"Soyez les bienvenus a l'ITC.\n")

texte=Text(Fp, width=40, height=5,yscrollcommand=Barrey.set)texte.pack()texte.insert(END,"Bonjour tout le monde.\n")Button(Fp,text="Info", command=info).pack()Button(Fp, text='Quitter', command = Fp.destroy).pack()

Barrey.config(command=texte.yview)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 24: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique24

Recopier un texte.

Un petit programme qui saisit un message en zone de saisie et le transcriten zone texte.

from Tkinter import *def info(): texte.insert(END,saisie.get()+'\n') saisie.set("")

Fp=Tk()saisie=StringVar()texte=Text(Fp, width=40, height=5)texte.pack()text = Entry(textvariable=saisie, width=30).pack()Button(Fp,text="Copier", command=info).pack()Button(Fp, text='Quitter', command = Fp.destroy).pack()Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 25: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique25

Attachement du widget.

Il est possible d'attacher un widget à un widget conteneur.

from Tkinter import *def info(): texte.insert(END,saisie.get()+'\n') saisie.set("")

Fp=Tk()saisie=StringVar()Button(Fp, text='Quitter', command = Fp.destroy).pack()texte=Text(Fp, width=40, height=5)texte.pack()Entry(textvariable=saisie, width=30).pack()copier = Button(texte,text="Copier", command=info)texte.window_create(INSERT, window=copier)texte.insert(END,'\n')Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 26: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique26

Caractéristiques de la fenêtre.

Option Type Fonction

exportselection indicateur Si cette option est activée (par défaut), le texte sélectionné estautomatiquement exporté dans le presse papier.

Insertofftimeinsertontime

délai Contrôle du clignotement du curseur.

padx, pady distance Marges horizontale et verticale entre le texte et le cadre intérieurdu widget (pas de marge par défaut).

insertbackground couleur Couleur d’arrière plan, zone couverte par le curseur d'insertion.

insertborderwidt distance Largeur de la bordure 3-D autour du curseur d’insertion.

insertwidth distance Largeur du curseur.

spacing1 distance Espacement avant la première ligne de texte. (0 par défaut).

spacing2 distance Espacement entre les lignes du texte. (0 par défaut).

spacing3 distance Espacement après la dernière ligne de texte. (0 par défaut).

selectbackground couleur Couleur de l’arrière-plan pour l’affichage des itemssélectionnés. La valeur par défaut dépend de la plate-forme.

selectborderwidth valeur Largeur du cadre dessiné autour des items sélectionnés. Lavaleur par défaut dépend de la plate-forme.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 27: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique27

Caractéristiques de la fenêtre.

Option Type Fonction

selectforeground couleur Couleur du premier plan pour l’affichage des itemssélectionnés. La valeur par défaut dépend de la plate-forme.

setgrid indicateur Contrôle du clignotement du curseur.

state constante Etat du widget : NORMAL (par défaut), ACTIVE ou DISABLED.Si DISABLED les appels à insert et delete sont ignorés.

tabs chaîne Paramétrage des déplacements engendrés par la tabulation.

xscrollcommand,yscrollcommand

appel Associe le widget Text à une barre de défilement. Ces optionsdoivent être affectées à la méthode set de la Scrollbar.

wrap Constante Façon de gérer les lignes lorsque le texte dépasse : NONE (pardéfaut), CHAR ou WORD.NONE : les caractères qui dépassent ne sont pas affichés, sinonles lignes trop longues sont coupées en plusieurs lignes.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 28: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique28

Agencement des widgets.

L'agencement des widgets répond à des règles bien précises

from Tkinter import *

def info(): texte.insert(END,saisie.get()+'\n') saisie.set("")

Fp=Tk()

saisie=StringVar()

texte=Text(Fp, width=40, height=5)

entree = Entry(textvariable=saisie, width=30)

copier = Button(Fp,text="Copier", command=info)sortir = Button(Fp, text='Quitter', command = Fp.destroy)sortir.pack(side='bottom')texte.pack(side='right')entree.pack(side='top')copier.pack(side='top')Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 29: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique29

Notion de rectangle alloué.Lorsqu'il doit placer un widget, le système de placement cherche le bord(haut, bas, droite ou gauche) qu'on lui demande d'utiliser.Il réserve alors une zone rectangulaire invisible sur toute la longueur de cebord. Cette zone sera affectée à ce widget et à ce widget seulement.Les dimensions sont calculées d'après la taille du widget.

Exemples :

pack(side = 'top'); pack(side = 'right');

Fp Fp

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 30: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique30

Suite de l'allocation.

Puis le système d'allocation continue selon les mêmes règles

Exemples :

pack(side = 'top');pack(side = 'right);

pack(side = 'right');pack(side = 'top';

$Fp $Fp

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 31: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique31

Occupation de l'espace.

Lorsqu'un rectangle a été alloué à un widget, ce dernier est placé en son centre.Cette caractéristique apparaît lorsque l'on fait varier la taille de la fenêtre principale.

from Tkinter import *Fp=Tk()Button(Fp,text="Haut.",command=Fp.quit).pack(side="top")Button(Fp,text="Bas.",command=Fp.quit).pack(side="bottom")Button(Fp,text="Gauche.",command=Fp.quit).pack(side="left")Button(Fp,text="Droite.",command=Fp.quit).pack(side="right")Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 32: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique32

Contrôle du widget dans le rectangle.

Il est possible de contrôler le remplissage du rectangle d'allocation par le widgetqu'il contient au moyen de la méthode "fill".fill = "x"fill = "y"fill = "both"On fait ainsi clairement apparaître le rectangle d'allocation.

from Tkinter import *Fp=Tk()Button(Fp,text="Haut.",command=Fp.quit).pack(side="top",fill="both")Button(Fp,text="Bas.",command=Fp.quit).pack(side="bottom",fill="both")Button(Fp,text="Gauche.",command=Fp.quit).pack(side="left",fill="both")Button(Fp,text="Droite.",command=Fp.quit).pack(side="right",fill="both")Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 33: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique33

Ordre des widgets.

On peut alors changer l'ordre des widgets.

Haut.Bas.Gauche.Droit.

Haut.Gauche.Bas.Droit.

Haut.Gauche.Droit.Bas.

Gauche.Droit.Haut.Bas.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 34: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique34

Contrôle du rectangle dans la fenêtre.

Dans les positionnement que nous avons défini, le rectangle alloué ne s'étendaitque sur la dimension qui avait servi à le déclarer. Une zone vide restait toujoursvisible dans la fenêtre principale.Il est possible de remédier à ce problème en demandant au rectangle de s'étendreau maximum dans la place qui reste au moyen de l'option "expand".expand = 1expand = 0

from Tkinter import *Fp=Tk()Button(Fp,text="Haut.",command=Fp.quit).pack(side="top",fill="both",expand=1)Button(Fp,text="Bas.",command=Fp.quit).pack(side="bottom",fill="both",expand=1)Button(Fp,text="Gauche.",command=Fp.quit).pack(side="left",fill="both",expand=1)Button(Fp,text="Droite.",command=Fp.quit).pack(side="right",fill="both",expand=1)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 35: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique35

Positionnement du widget.

Noua avons vu dans les exemples qui viennent d'être décrits un widget occupant latotalité du rectangle lorsque celui ci s'étalait.Il est possible de placer un widget qui conserve sa taille dans un rectangle quis'agrandit au moyen de la méthode "anchor".On dispose pour cela de 9 emplacements.

nordnord ouest nord est

centerouest est

sudsud ouest sud est

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 36: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique36

Exemples.

from Tkinter import *Fp=Tk()Button(Fp,text="Haut.",command=Fp.quit).pack(side="top",expand=1,anchor="n")Button(Fp,text="Bas.",command=Fp.quit).pack(side="bottom",expand=1,anchor="n")Button(Fp,text="Gauche.",command=Fp.quit).pack(side="left",expand=1,anchor="n")Button(Fp,text="Droite.",command=Fp.quit).pack(side="right",expand=1,anchor="n")Fp.mainloop()

from Tkinter import *Fp=Tk()Button(Fp,text="Haut.",command=Fp.quit).pack(side="top",expand=1,anchor="n")Button(Fp,text="Bas.",command=Fp.quit).pack(side="bottom",expand=1,anchor="sw")Button(Fp,text="Gauche.",command=Fp.quit).pack(side="left",expand=1,anchor="c")Button(Fp,text="Droite.",command=Fp.quit).pack(side="right",expand=1,anchor="se")Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 37: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique37

Et en combinant les positionnements.

from Tkinter import *Fp=Tk()

Button(Fp,text="Haut.",command=Fp.quit).pack(side="top",expand=1,fill="y",anchor="c")Button(Fp,text="Bas.",command=Fp.quit).pack(side="bottom",expand=1,fill="y",anchor="c")Button(Fp,text="Gauche.",command=Fp.quit).pack(side="left",expand=1,fill="x",anchor="c")Button(Fp,text="Droite.",command=Fp.quit).pack(side="right",expand=1,fill="x",anchor="c")Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 38: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique38

Double fenetre 1

from Tkinter import *def copie() : f = int(numfen.get()) texte[f].insert(END,saisie.get()+'\n') saisie.set("")Fp=Tk()texte = ["",""]saisie=StringVar()numfen=StringVar()

Button(Fp, text='Quitter', command = Fp.destroy).pack()

texte[0]=Text(Fp, width=40, height=5)texte[0].pack()

texte[1]=Text(Fp, width=40, height=5)texte[1].pack()

Entry(textvariable=saisie, width=30).pack()Entry(textvariable=numfen, width=3).pack()Button(Fp, text='Copier', command = copie).pack()

Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 39: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique39

Passage de paramètres.

Le passage de paramètres à l'intérieur d'une méthode est spécial.Si on se contente de passer le paramètre directement par l'intermédiaire de la méthode attachéeau widget, la fonction est immédiatement exécutée, alors que lorsque le widget est activé, rienne se produit.

def imp(i) : print str(i)bouton1 = Button(Fp, text='Imprimer 1', command = imp(1)).packbouton2 = Button(Fp, text='Imprimer 2', command = imp(2)).pack

Cet état de choses est du au fait que avec :command = imp(1)

On assigne à "command" le résultat de l'appel de "imp" pour laquelle la parenthèse qui entourele "1" est considérée elle aussi comme un appel de fonction qui retourne la valeur "1".

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 40: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique40

Solutions.

Ecrire deux fonctions.

def imp(i) : print str(i)bouton1 = Button(Fp, text='Imprimer 1', command = imp1).packbouton2 = Button(Fp, text='Imprimer 2', command = imp2).pack

Qui font appel à la fonction imp avec le paramètre adapté.

def imp1 : imp (1)def imp2 : imp (2)

Utiliser une fonction lambda.

def imp(i) : print str(i)bouton1 = Button(Fp, text='Imprimer 1', command = lambda : imp(1)).packbouton2 = Button(Fp, text='Imprimer 2', command = lambda : imp(2)).pack

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 41: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique41

Les frames.

from Tkinter import *Fp=Tk()F1=Frame(Fp)F2=Frame(Fp)F3=Frame(Fp)B1=Button(F1,text="Bouton 1").pack(side="left")Bq=Button(F1,text="Quitter",command=Fp.quit).pack(side="left")B2=Button(F1,text="Bouton 2").pack(side="left")L=Label(F2,text="\nVoici un texte jaune sur fond rouge\n",fg="yellow",bg="red").pack()Ba=Button(F3,text="Bouton A").pack(side="left")Bb=Button(F3,text="Bouton B").pack(side="left")Bc=Button(F3,text="Bouton C").pack(side="left")F1.pack()F2.pack()F3.pack()Fp.mainloop()

Le placement qui vient d'être défini ne permet pas une grande variété de placements.Une frame est un widget spécifique permettant de définir une sous fenêtrereprésentant une zone pouvant contenir plusieurs autres widget afin d'en organiserle placement.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 42: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique42

Identification des cadres.

from Tkinter import *Fp=Tk()F1=LabelFrame(Fp,text="Premier cadre.")F2=LabelFrame(Fp,text="Second cadre.")F3=LabelFrame(Fp,text="Troisième cadre.")B1=Button(F1,text="Bouton 1").pack(side="left")Bq=Button(F1,text="Quitter",command=Fp.quit).pack(side="left")B2=Button(F1,text="Bouton 2").pack(side="left")L=Label(F2,text="\nVoici un texte jaune sur fond rouge\n",fg="yellow",bg="red").pack()Ba=Button(F3,text="Bouton A").pack(side="left")Bb=Button(F3,text="Bouton B").pack(side="left")Bc=Button(F3,text="Bouton C").pack(side="left")F1.pack()F2.pack()F3.pack()Fp.mainloop()

Il est aussi possible d'identifier les différentscadres.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 43: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique43

Les placements.

Il existe trois manières de placer un widget dans un conteneur.pack()place()grid()

Jusqu'à présent, c'est la méthode pack() qui a été utilisée.C'est une méthode rapide mais pas très précise.Elle est utilisable dans le cas de fenêtres simples.

La méthode place() spécifie un placement du widger basé sur lescoordonnées X et Y. C'est la méthode qui permet le meilleurcontrôle de placement mais qui est toutefois un peu complexedans son utilisation.

La méthode grid() se base sur le principe que le conteneur estdécoupé en une grille dans laquelle chaque emplacement estrepéré par sa ligne et sa colonne.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 44: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique44

Exemple.On suppose que l'on veuille réaliser un claviernumérique.

from Tkinter import *Fp = Tk()

F123=Frame(Fp)F456=Frame(Fp)F789=Frame(Fp)F0=Frame(Fp)B1=Button(F123,text="1").pack(side="left", padx=2, pady=2,ipadx=2)B2=Button(F123,text="2").pack(side="left", padx=2, pady=2,ipadx=2)B3=Button(F123,text="3").pack(side="left", padx=2, pady=2,ipadx=2)B4=Button(F456,text="4").pack(side="left", padx=2, pady=2,ipadx=2)B5=Button(F456,text="6").pack(side="left", padx=2, pady=2,ipadx=2)B6=Button(F456,text="6").pack(side="left", padx=2, pady=2,ipadx=2)B7=Button(F789,text="7").pack(side="left", padx=2, pady=2,ipadx=2)B8=Button(F789,text="8").pack(side="left", padx=2, pady=2,ipadx=2)B9=Button(F789,text="9").pack(side="left", padx=2, pady=2,ipadx=2)B0=Button(F0,text="0").pack(side="left", padx=2, pady=2,ipadx=2)F123.pack(side="top")F456.pack(side="top")F789.pack(side="top")F0.pack(side="top")Button(Fp, text='Quitter', command = Fp.destroy).pack(side="top")

Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 45: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique45

Avec grid.

from Tkinter import *Fp = Tk()

B1=Button(Fp,text="1").grid(row=0, column=0, ipadx = 4, pady=2)B2=Button(Fp,text="2").grid(row=0, column=1, ipadx = 4, pady=2)B3=Button(Fp,text="3").grid(row=0, column=2, ipadx = 4, pady=2)B4=Button(Fp,text="4").grid(row=1, column=0, ipadx = 4, pady=2)B5=Button(Fp,text="6").grid(row=1, column=1, ipadx = 4, pady=2)B6=Button(Fp,text="6").grid(row=1, column=2, ipadx = 4, pady=2)B7=Button(Fp,text="7").grid(row=2, column=0, ipadx = 4, pady=2)B8=Button(Fp,text="8").grid(row=2, column=1, ipadx = 4, pady=2)B9=Button(Fp,text="9").grid(row=2, column=2, ipadx = 4, pady=2)B0=Button(Fp,text="0").grid(row=3, column=1, ipadx = 4, pady=2)

Button(Fp, text='Quitter', command = Fp.destroy).grid(row=4, column=1, ipadx = 4, pady=2)

Fp.mainloop()C. A

perg

his-

Tram

oni

C. Ape

rghi

s-Tra

mon

i

Page 46: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique46

Etalement d'un widget.

Si un widget est trop large ou trop haut, il occupera plus d'une colonne enlargeur ou plus d'une ligne en hauteur.

Ce paramètre peut être fixé au moyen des caractéristiquesrowspan = Nombre de lignescolumnspan = Nombre de colonnes

Entee(Fp,width=60).grid(row=0, column=1, columnspan = 4)

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 47: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique47

Avec place.

from Tkinter import *Fp = Tk()

B1=Button(Fp,text="1").place(x=10,y=10)B2=Button(Fp,text="2").place(x=40,y=10)B3=Button(Fp,text="3").place(x=70,y=10)B4=Button(Fp,text="4").place(x=10,y=40)B5=Button(Fp,text="5").place(x=40,y=40)B6=Button(Fp,text="6").place(x=70,y=40)B7=Button(Fp,text="7").place(x=10,y=70)B8=Button(Fp,text="8").place(x=40,y=70)B9=Button(Fp,text="9").place(x=70,y=70)B0=Button(Fp,text="0").place(x=40,y=100)

Button(Fp, text='Quitter', command = Fp.destroy).place(x=25,y=140)

Fp.mainloop() C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 48: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique48

Double fenêtre.

from Tkinter import *def copie(f) : texte[f].insert(END,saisie.get()+'\n') saisie.set("")Fp=Tk()texte = ["",""]saisie=StringVar()numfen=StringVar()Button(Fp, text='Quitter', command = Fp.destroy).pack(side = 'top')f1 = Frame(Fp)f2 = Frame(Fp)texte[0]=Text(f1, width=40, height=5)texte[0].pack(side = 'top')Button(f1, text='Copier', command = lambda : copie(0)).pack(side = 'top')texte[1]=Text(f2, width=40, height=5)texte[1].pack(side = 'top')Button(f2, text='Copier', command = lambda : copie(1)).pack(side = 'top')Entry(textvariable=saisie, width=30).pack()f1.pack(side = 'left')f2.pack(side = 'right')Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 49: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique49

Menu simple.

On dispose d'un widget spécifique pour créer des menus. Tout d'abord, on crééeune instance dans la classe "Menu"

Nom_du_menu = Menu(Fenetre)

La méthode "add_xxx" nous permet d'y ajouter des caractéristiques.add_command() ajoute une entrée de menu ordinaire.

from Tkinter import *Fp = Tk()Fp.geometry("300x200")# Creation de la barre de menu:menu1 = Menu(Fp)# Creation du menu fichier:menu1.add_command(label="Quit", command=Fp.quit)cascad = Menu(menu1)# afficher le menuFp.config(menu=menu1)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 50: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique50

Menu en cascade.

Autres possibilités de menu.add_separator() ajoute une ligne de séparation.add_cascade() Pour créer un sous menu.

from Tkinter import *Fp = Tk()Fp.geometry("300x200")def entete(tit): Fp.title(tit)def couleur(coul): Fp.tk_setPalette(coul)# Creation de la barre de menu:menu1 = Menu(Fp)# Creation du menu fichier:fichier = Menu(menu1, tearoff=1)menu1.add_cascade(label="Fichier",menu=fichier)fichier.add_command(label="Quit", command=Fp.quit)cascad = Menu(menu1, tearoff=0)# afficher le menuFp.config(menu=menu1)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 51: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique51

L'option tearoff.

C'est un booléen qui va permettre de détacher (tearoff=1) ou non (tearoff=0) le menu.Par défaut cette option vaut 1.Pour qu'un menu ne soit pas détachable il faut préciser tearoff=0.

Dans l'exemple ci-dessus, l'un des menus est détachable et l'autre ne l'est pas.

Une ligne en pointillés au début du menu permet de le savoir.

Un clic sur cette ligne ouvre une petite fenêtre contenant les entrées du menu.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 52: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique52

Menus multiples.

from Tkinter import *Fp = Tk()Fp.geometry("300x200")def entete(tit): Fp.title(tit)def couleur(coul): Fp.tk_setPalette(coul)# Creation de la barre de menu:menu1 = Menu(Fp)# Creation du menu fichier:fichier = Menu(menu1, tearoff=1)menu1.add_cascade(label="Fichier",menu=fichier)fichier.add_command(label="Quit", command=Fp.quit)cascad = Menu(menu1, tearoff=0)menu1.add_cascade(label="Cascade",menu=cascad)titre = Menu(cascad, tearoff=0)cascad.add_cascade(label="Titre",menu=titre)titre.add_command(label="Demonstration.", command=lambda : entete('Demonstration.'))titre.add_command(label="Colorisation", command=lambda : entete('Colorisation.'))color = Menu(cascad)cascad.add_cascade(label="Couleur",menu=color)color.add_command(label="Bleu", command=lambda : couleur('blue'))color.add_command(label="Vert", command=lambda : couleur('green'))color.add_command(label="Rouge", command=lambda : couleur('red'))color.add_command(label="Jaune", command=lambda : couleur('yellow'))# afficher le menuFp.config(menu=menu1)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 53: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique53

Le widget menubuttons.

from Tkinter import *Fp = Tk()Fp.geometry("300x200")def entete(tit): Fp.title(tit)def couleur(coul): Fp.tk_setPalette(coul)mb1=Menubutton(Fp,text="Fichier",relief="raised")mb1.quit=Menu(mb1,tearoff=0)mb1.quit.add_command(label="Quitter", command=Fp.quit)mb1.config(menu=mb1.quit)mb1.pack(side="left",pady=4,padx=4)mb2=Menubutton(Fp,text="Cascade",relief="raised")cascad=Menu(mb2,tearoff=0)mb2.config(menu=cascad)titre=Menu(cascad,tearoff=0)cascad.add_cascade(label="titre",menu=titre)titre.add_command(label="Demonstration.", command=lambda :entete('Demonstration.'))titre.add_command(label="Colorisation", command=lambda :entete('Colorisation.'))color=Menu(cascad)cascad.add_cascade(label="Couleur",menu=color)color.add_command(label="Bleu", command=lambda : couleur('blue'))color.add_command(label="Vert", command=lambda : couleur('green'))color.add_command(label="Rouge", command=lambda : couleur('red'))color.add_command(label="Jaune", command=lambda : couleur('yellow'))mb2.pack(side="left",pady=4)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 54: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique54

Explication.

On crée d'abord les menubouton.

mb1=Menubutton(Fp,text="Fichier",relief="raised"). . .

mb2=Menubutton(Fp,text="Cascade",relief="raised")

Puis on crée des menus à l'intérieur de ceux ci.

mb1.quit=Menu(mb1,tearoff=0)mb1.quit.add_command(label="Quitter", command=Fp.quit)mb1.config(menu=mb1.quit)mb1.pack(side="left",pady=4,padx=4)

. . .

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 55: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique55

Les menus d'option.

Ce widget permet la création d'un menu déroulant à partit d'un bouton de menu.

from Tkinter import *

Fp = Tk()

def imprime(): print "La valeur selectionnee est ", var.get()

var = StringVar()var.set("Zero")

option = OptionMenu(Fp, var, "Zero", "Un", "Deux", "Trois")option.pack()button = Button(Fp, text="OK", command=imprime).pack()button = Button(Fp, text="Quitter", command=Fp.quit).pack()

Fp.mainloop() C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 56: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique56

Autre manière.

Il est aussi possoble de procéder à la création d'un menu à partit d'une liste d'options.

from Tkinter import *

Fp = Tk()

liste = ["Zero","Un","Deux","Trois"]

def imprime(): print "La valeur selectionnee est ", var.get()

var = StringVar()var.set(liste[0])

option = apply(OptionMenu,(Fp, var) + tuple(liste))option.pack()button = Button(Fp, text="OK", command=imprime).pack()button = Button(Fp, text="Quitter", command=Fp.quit).pack()

Fp.mainloop()C. A

perg

his-

Tram

oni

C. Ape

rghi

s-Tra

mon

i

Page 57: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique57

Les cases à cocher.

from Tkinter import *Fp=Tk()val1 = StringVar()val2 = StringVar()val1.set(0)val2.set(0)Button(Fp, text='Quitter', command = Fp.destroy).pack(side = 'top')chk1=Checkbutton(Fp,text="Valeur de la premierevariable.",variable=val1).pack()chk2=Checkbutton(Fp,text="Valeur de la secondevariable.",variable=val2).pack()Label(Fp,text="La premiere variable est a ").pack(side="left")Label(Fp,textvariable=val1).pack(side="left")Label(Fp,text="La seconde est a ").pack(side="left")Label(Fp,textvariable=val2).pack(side="left")Fp.mainloop()

StringVar() instancie un objet de la classe concernée qui fait partie dumodule Tkinter au même titre que les classes similaires DoubleVar(), IntVarVar() etBooleanVar(). Ces classes permettent de définir des variables Tkinter, en fait desobjets, qui se se comportent comme des variables pour les widgets Tkinter.Les objets val1 et val2 contiennent l'équivalent d'une variable de type chaîne, dansun format spécifique à Tkinter. Pour accéder à sa valeur depuis Python, il faututiliser les méthodes spécifiques de cette classe d'objets, set() pour lui assigner unevaleur,et get() pour de la récupérer

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 58: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique58

Les boutons radio.

from Tkinter import *Fp=Tk()radio = StringVar()radio.set("Inconnu")F1 = Frame(Fp)F2 = Frame(Fp)Button(F1, text='Quitter', command = Fp.destroy).pack(side = 'top')r1=Radiobutton(F1,text="Homme",variable=radio,value="Homme")r2=Radiobutton(F1,text="Femme",variable=radio,value="Femme")r3=Radiobutton(F1,text="Enfant",variable=radio,value="Enfant")r1.pack(side="left")r2.pack(side="left")r3.pack(side="left")Label(F2,text="Votre sexe : ").pack(side="left")Label(F2,textvariable=radio).pack(side="left")F1.pack()F2.pack()Fp.mainloop()

Un bouton radio ressemble un peu a une case à cocher, à la différence près queplusieurs boutons sont associés à une même variable. Un seul d'entre eux pouvant êtreactif.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 59: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique59

Les fenêtres fille.

from Tkinter import *Fp = Tk()

def cree(): Fp.fille = Tk() msg = Message(Fp.fille, text="Bienvenue dans notre nouvelle creation.", bg="green", fg="red") msg.pack() quit = Button(Fp.fille, text="Fermer", command=Fp.fille.destroy).pack()

Button(Fp, text = "quit", command = Fp.destroy).pack()Button(Fp, text = "Creer", command = cree).pack()Fp.mainloop()

Pour créer une fenêtre fille, c'est à dire rattachée à una fenêtre qui la crée, il faut définirson hérédité.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 60: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique60

La méthode Toplevel.

from Tkinter import *def fille(): F1=Toplevel() F1.geometry("400x100") F1.title("Fenetre fille.") Label(F1,text="Vous venez d'assister a la creation d'unefenetre.").pack(side="bottom") Button(F1,text="Fermer",command=F1.destroy).pack()Fp=Tk()Fp.geometry("200x200")Button(Fp, text='Quitter', command = Fp.destroy).pack()Button(Fp,text="Nouvelle fenetre",command=fille).pack()Fp.mainloop()

Cette méthode va nous permettre d'ouvrir de nouvelles fenêtresindépendantes.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 61: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique61

Séparation en zones distinctes.

le widget PanedWindow permet de séparer une fenêtre, un cadre ou un toplevel endeux zones ajustables.

Le sens de séparation du widget est spécifié au moyen de la directive orient.

orient=HORIZONTALorient=VERTICAL

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 62: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique62

Programme

from Tkinter import *def horizontal(): Fh=Toplevel() Fh.geometry("200x100") Button(Fh, text='Fermer', command = Fh.destroy).pack(side="top") Demi=PanedWindow(Fh, orient=HORIZONTAL) Demi.pack(expand="yes",fill="both") gauche=Label(Demi,text="Cote gauche",bg="yellow") droite=Label(Demi,text="Cote droite",bg="Blue") Demi.add(gauche) Demi.add(droite)def vertical(): Fh=Toplevel() Fh.geometry("200x100") Button(Fh, text='Fermer', command = Fh.destroy).pack(side="top") Demi=PanedWindow(Fh, orient=VERTICAL) Demi.pack(expand="yes",fill="both") haut=Label(Demi,text="Haut",bg="green") bas=Label(Demi,text="Bas",bg="red") Demi.add(haut) Demi.add(bas)Fp=Tk()Fp.geometry("200x200")Button(Fp, text='Quitter', command = Fp.destroy).pack()Button(Fp,text="Decoupage\nHorizontal",command=horizontal).pack(side="left")Button(Fp,text="Decoupage\nVertical",command=vertical).pack(side="right")Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 63: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique63

Valider un bouton.

from Tkinter import *Fp=Tk()

Bouton = "valide";var = StringVar()var.set ("Invalider la sortie")def change () : global Bouton if (Bouton == "invalide") : quit.config(state = "normal") Bouton = "valide" var.set ("Invalider la sortie") else : quit.config(state = "disabled") Bouton = "invalide" var.set ("Valider la sortie") print "La sortie est",Bouton

Fp.title("Validation.")quit = Button(Fp, text='Quitter', command = Fp.destroy)Button(Fp, textvariable = var, command = change).pack()quit.pack()Fp.mainloop()

Un bouton a plusieurs états, "normal" ou "disabled.La méthode "config" permet de changer son état.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 64: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique64

Changer le texte d'un bouton.

from Tkinter import *Fp=Tk()

compteur = StringVar()compteur.set (0)def inc () : global compteur compteur.set (int(compteur.get()) + 1)

def imprime() : global compteur print "La valeur du compteur est de ", compteur.get()

Fp.title("Comptage.")quit = Button(Fp, text='Quitter', command = Fp.destroy)Button(Fp, textvariable = compteur, command = imprime).pack()Button(Fp, text='Incremente', command = inc).pack()quit.pack()Fp.mainloop()

Le texte contenu dans un bouton peut être récupéré dans unevariable spécifique de type "StringVar".

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 65: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique65

Les curseurs.

from Tkinter import *Fp=Tk()

Fp.title("Curseurs.")quit = Button(Fp, text='Quitter', command = Fp.destroy)Scale(Fp,resolution = 1,label='Hauteur' ,orient = 'vertical').pack ()Scale(Fp, resolution = 1,label='Largeur' ,orient = 'horizontal').pack ()quit.pack()Fp.mainloop()

Ce widget permet de gérer un curseur.Les valeurs par défaut sont :

Valeur initiale : 0Valeur finale : 100Incrément : 1

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 66: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique66

Spécifier les valeurs.

from Tkinter import *Fp=Tk()

Fp.title("Curseurs.")quit = Button(Fp, text='Quitter', command = Fp.destroy)v = Scale(Fp,from_=1,to=200,resolution=5,label='Hauteur' ,orient='vertical')h = Scale(Fp, from_=1,to=200,resolution=5,label='Largeur',orient='horizontal')v.pack ()h.pack ()quit.pack()Fp.mainloop()

Pour spécifier ses propres valeurs, on utilise les caractéristiques:Les valeurs par défaut sont :

from_ = initialeto = finaleresolution = incrément

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 67: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique67

Récupérer les valeurs

from Tkinter import *

Fp = Tk()Fp.title("Curseurs")

Ab = Label(Fp, text = "", bg = "white", fg = "green", font=("arial", 12, "bold"))Ab.pack()Or = Label(Fp, text = "", bg = "white", fg = "blue", font=("arial", 12, "bold"))Or.pack()

def getx(event): x = Sx.get() Ab.configure(text = x)

def gety(event): y = Sy.get() Or.configure(text = y)

Sx = Scale(Fp, orient=HORIZONTAL, length = 100, from_=0, to=100, tickinterval=50, command = getx)Sy = Scale(Fp, orient=VERTICAL, length = 100, from_=0, to=100, tickinterval=50, command = gety)Sx.pack()Sy.pack()quit = Button(Fp, text='Quitter', command = Fp.destroy).pack()Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 68: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique68

Création d'une liste.

from Tkinter import *Fp=Tk()jours=Listbox(Fp)titre=Label(Fp,text="Les jours de la semaine.")bouton=Button(Fp, text='Quitter', command = Fp.destroy)titre.pack()jours.pack()bouton.pack()for j in ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"]: jours.insert(END,j)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 69: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique69

Exploitation d'une liste.

from Tkinter import *def affiche(e): texte = StringVar() index = couleurs.curselection()[0] nom = couleurs.get(index) texte.set("Couleur : " + nom + ".") F1=Toplevel(bg = nom) F1.geometry("200x200") F1.title("Colorimetre.") Label(F1,textvariable=texte, bg = nom,).pack(side="bottom") Button(F1,text="Fermer",command=F1.destroy).pack()Fp=Tk()couleurs=Listbox(Fp)titre=Label(Fp,text="Liste de couleurs.")bouton=Button(Fp, text='Quitter', command = Fp.destroy)titre.pack()couleurs.pack()bouton.pack()couleurs.bind("<Double-Button-1>", affiche )for c in["blue","cyan","gold","gray","green","ivory","red","seashell2","skyblue","yellow"]: couleurs.insert(END,c)Fp.mainloop()

Un clic sur un élément appelle le fonction affiche. Cette fonction ouvre unenouvelle fenêtre dont la couleut de fond est celle qui a été sélectionnée.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 70: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique70

Quelques explications.

La ligne :couleurs.bind("<Double-Button-1>", affiche )

Indique que le double clic du bouton 1 de la souris sur un élément de la liste "couleurs" feraappel à la fonction concernée, soit "affiche".

Dans la fonction, on créée un objet Tkinter de type chaîne pour afficher un label.texte = StringVar()

On récupère l'indice de l'élément sur lequel le double clic a eu lieu.index = couleurs.curselection()[0]

On récupère le libellé de l'élément en question au moyen de la méthode "get".nom = couleurs.get(index)

On créée le texte à afficher au moyen de la méthode "set".texte.set("Couleur : " + nom + ".")

Et on procède a l'affichage de la nouvelle fenêtre dans la couleur choisie.F1=Toplevel(bg = nom)F1.geometry("200x200")F1.title("Colorimetre.")Label(F1,textvariable=texte, bg = nom,).pack(side="bottom")

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 71: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique71

Afficher des images.

from Tkinter import *def affiche(i): F1=Toplevel() logo = Label(F1, image=i) logo.pack() Button(F1,text="Fermer",command=F1.destroy).pack()

Fp=Tk()Fp.geometry("200x100")glogo=PhotoImage(file="gic.gif")llogo=PhotoImage(file="luminy.gif")Label(Fp,text="Quel logo voulez vous voir ?.").pack(side="top")Button(Fp, text='Quitter', command = Fp.destroy).pack(side="bottom")Button(Fp,text="Luminy.",command=lambda : affiche(llogo)).pack(side="left")Button(Fp,text="GIC.",command=lambda : affiche(glogo)).pack(side="right")Fp.mainloop()

Le widget PhotoImage permet d'afficher des images dans un label ou un canvas.Le fichier image doit se trouver dans le même répertoire que le script python concerné.Seules sont reconnues les images aux formats gif ou ppm.L'affichage d'autres formats est possible à condition d'utiliser la bilbiothèque PIL.http://python.developpez.com/outils/Librairies/

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 72: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique72

Communication entre fenêtres.

from Tkinter import *def saisie(): F1=Toplevel() F1.geometry("400x100") F1.title("Fenetre de saisie.") Entry(F1,textvariable=texte,width=30).pack() Button(F1,text="Fermer",command=F1.destroy).pack()Fp=Tk()texte = StringVar()Fp.geometry("200x200")Label(Fp,textvariable=texte,width=30,fg="blue").pack()Button(Fp, text='Quitter', command = Fp.destroy).pack()Button(Fp,text="Fenetre de saisie",command=saisie).pack()Fp.mainloop()

C'est par l'intermédiaire des variables Tkinter que les fenêtres peuvent communiquer entreelles.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 73: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique73

La méthode bind.

La méthode "bind()" va nous permettre de lier un événement extérieur à une action.L'événement peut être :

L'action sur une touche du clavier.Un clic de sourisUn mouvement de la souris.

L'action associée peut être :Lancer une méthode.Agir sur une fenêtre.Terminer le programme.

L'événement peut être associé :A un widget.A la totalité de la fenêtreA l'application elle même.

La méthode "bind()" permet de lier un widget, une action externe et un événement.Elle comporte deux arguments :

La séquence, action externe qui déclenche l'événement.La fonction, méthode à exécuter lors du déclenchement de l'événement.

La méthode doit être déclarée avant son déclenchement.C. A

perg

his-

Tram

oni

C. Ape

rghi

s-Tra

mon

i

Page 74: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique74

Exemple.

from Tkinter import *Fp = Tk()Label(Fp, text="On peut aussi sortir par la touche q").pack()clic = Button(Fp, text = "Quitter", command=Fp.destroy).pack()def stop(event): Fp.destroy()Fp.bind('<q>', stop)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 75: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique75

Liste d'évènements.

Evénements liés à la souris.<Enter> La souris entre dans le champ du widget.<Leave> La souris sort du champ du widget.<Button-1> Clic sur le bouton gauche.<Button-3> - Clic sur le bouton droit.<Double-Button-1> - Double clic sur le bouton gauche.<B1-Motion> La souris se déplace avec le bouton gauche pressé.<ButtonRelease> Relâchement du bouton.

Evénements liés au clavier.<Key> Action sur n'importe quelle touche.<KeyRelease> Relâchement de n'importe quelle touche.<Return> Action sur la touche [Enter]X Action sur la touche X majuscule.

Séquences combinées<Control><Shift>

Exemples :

Fp.bind('<Control-F10>', stop)Fpt.bind('<Shift-space>', stop)

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 76: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique76

Exemple.

import randomfrom Tkinter import *Fp = Tk()def change(event): colors =['blue','green','orange','pink','red','white','yellow'] color = random.choice(colors) Fp.configure(bg=color)btn = Button(Fp, text= "Colorize")Button(Fp, text = "Quitter", command=Fp.destroy).pack()

btn.pack()# Aucune methode n'a ete atachee au bouton.# On se sert de la methode bind pour le faire.btn.bind('<Button-1>', change)

Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 77: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique77

Les messages.

from Tkinter import *Fp = Tk()

def kill(event): fille.destroy()

def cree(event): global fille fille = Toplevel(Fp) msg = Message(fille, text="Pour sortir, cliquer sur le bouton <Quitter>.", bg="green", fg="red") msg.pack() Fp.bind('<Leave>', kill)

Q = Button(Fp, text = "Quitter", command = Fp.destroy)Q.pack()Q.bind('<Enter>', cree)Fp.mainloop()

La méthode "toplevel" peut être utilisée pour faire passer des messages.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 78: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique78

Le widget canvas

Un canvas est une zone dans laquelle on peut dessiner des lignes, rectangles ,cercles, arcs, courbes ou encore afficher des images.

rectangle=x.create_rectangle(Xh,Yh,Xb,Yb, fill='white', outline='red', width=10)ellipse=x.create_oval(Xh,Yy,Xb,Yb, fill='green', outline='blue', width=5)arc=x.create_arc(Xh,Yh,Xb,Yb,start=depart,extent=extension,style=Tkinter.PIESLICE)

Xh et Yh sont les coordonnées du point en haut à gauche de la figure.Xb et Yb sont les coordonnées du point en bas à droite de la figure.Dans le cas d'un ovale ou d'un arc', il s'agit des coordonnées du rectangle circonscrit.

fill indique la couleur de remplissageoutline est la couleur du traitwidth est la largeur du trait

Pour tracer un arc (create_arc), l'angle de départ et l'extension sont donnés en degrés et enprogression anti-horaire.

CHORD permet de limiter la surface entre la partie d'arc et sa corde.PIESLICE trace les rayons entre le centre et les extrémités.ARC ne trace que l'arc.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 79: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique79

Exemples.

from Tkinter import *Fp = Tk()Button(Fp, text='Quitter', command = Fp.destroy).pack()dess=Canvas(Fp,width=200,height=200)dess.pack()rect=dess.create_rectangle(10,10,60,90,fill='white',outline='red',width=2)ellipse=dess.create_oval(70,10,150,80,fill='green',outline='blue',width=2)arc1=dess.create_arc(10,100,70,180,start=0,extent=90,fill='pink',outline='gold',width=2, style=PIESLICE)arc2=dess.create_arc(100,100,170,180,start=0,extent=250,fill='lightblue',outline='gold', width=2,style=CHORD)Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 80: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique80

Lignes.

ligne=x.create_line(160,190, 250,110, 270,170, 180,120)

Les arguments sont des paires X,Y représentant les coordonnées des points.

smooth=True courbe une ligne brisée.splinesteps=12 lisse de la courbe si smooth=True

arrow=FIRST place une flèche au début de la ligne.arrow=LAST place une flèche à la fin de la ligne.arrow=BOTH place une flèche aux bouts de la ligne.arrowshape=(8,10,3) pour modifier la longueur de la flèche, la longueur des branches et lalargeur

Pour une ligne de grande épaisseur, capstyle permet de donner le moyen de terminer lesextrémités.capstyle=BUTT , ROUND ou PROJECTING

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 81: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique81

Tracé de lignes.

from Tkinter import *Fp = Tk()

Button(Fp, text='Quitter', command = Fp.destroy).pack()dess=Canvas(Fp,width=200,height=200)dess.pack()ligne=dess.create_line(10,10,150,190,20,170,100,150,width=5,fill="red",capstyle=ROUND )Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 82: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique82

Lissage de la ligne.

from Tkinter import *Fp = Tk()

Button(Fp, text='Quitter', command = Fp.destroy).pack()dess=Canvas(Fp,width=200,height=200)dess.pack()ligne=dess.create_line(10,10,150,190,20,170,100,150,width=5,fill="red",capstyle=ROUND,smooth=True)Fp.mainloop()

Lissage standard. splinesteps=5.splinesteps=2. splinesteps=10.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 83: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique83

Polygones.

polygone=x.create_polygon(X1,Y1, …,Xn,Yn, fill="ccc", width=z, outline="ccc")

Les arguments sont des paires X,Y représentant les coordonnées des points.Pour un polygone, il n'est pas nécessaire de répéter les coordonnées du premier sommet.

smooth=True courbe une ligne brisée.splinesteps=12 lisse de la courbe si smooth=True

from Tkinter import *Fp = Tk()

Button(Fp, text='Quitter', command = Fp.destroy).pack()dess=Canvas(Fp,width=200,height=200)dess.pack()polygone=dess.create_polygon(35,105, 120,85, 95,25, 80,75, 25,60, 65,30, fill="cyan",width=2, outline='red',smooth=True)

Fp.mainloop()

avec smooth=True

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 84: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique84

Reconfigurer un objet.

Si une instance est créée au moment de la création l'objetconsidéré pourra être ultérieurement manipulé.

x.itemconfigure(instance,reconfiguration).x.delete(instance) pour détruire l'objet instancié.

from Tkinter import *Fp=Tk()def change(couleur): fond.itemconfigure(rect,fill=couleur)F1=Frame(Fp)Button(F1,text="Rouge.",command=lambda : change("red")).pack(side="left")Button(F1,text="Vert",command=lambda : change("green")).pack(side="left")Button(F1,text="Bleu",command=lambda : change("blue")).pack(side="left")Button(F1,text="Jaune",command=lambda : change("yellow")).pack(side="left")Button(F1,text="Rose",command=lambda : change("pink")).pack(side="left")Button(F1,text="Orange",command=lambda : change("orange")).pack(side="left")fond = Canvas(Fp, width=300, height=200, background='darkgray')F1.pack(side="top")fond.pack()rect=fond.create_rectangle(50,50,250,150, fill="blue")Button(Fp, text='Quitter', command = Fp.destroy).pack()Fp.mainloop() C. A

perg

his-

Tram

oni

C. Ape

rghi

s-Tra

mon

i

Page 85: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique85

Tracé à main levée.

from Tkinter import *

# Etat du bouton 1 (gauche)b1 = "non"# Coordonnees du point precedent.prev = (None, None)couleur = "black"

def fond(cf):# Changement couleur du fond. trace.configure(background=cf)

def change (ct):# Changement couleur du trace. global couleur couleur = ct

def noclic(event):# On ne trace rien. global b1 b1 = "non"

def clic(event):# On trace. global b1, prev b1 = "oui" prev = (None, None)

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 86: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique86

Tracé à main levée.

def motion(event):# Recuperation coordonnees. if b1 == "oui": global prev global couleur if prev != (None,None): xprev,yprev=prev event.widget.create_line(xprev,yprev,event.x,event.y, fill=couleur,smooth=TRUE) prev = (event.x,event.y)

Fp = Tk()F1=Frame(Fp)F2=Frame(Fp)F3=LabelFrame(Fp, text="Zone de dessin.")

Label(F1, text="Couleur du trace.").pack(side="left")Button(F1,text="Noir.",command=lambda : change("black")).pack(side="left")Button(F1,text="Blanc",command=lambda : change("white")).pack(side="left")Button(F1,text="Rouge.",command=lambda : change("red")).pack(side="left")Button(F1,text="Vert",command=lambda : change("green")).pack(side="left")Button(F1,text="Bleu",command=lambda : change("blue")).pack(side="left")Button(F1,text="Jaune",command=lambda : change("yellow")).pack(side="left")Button(F1,text="Rose",command=lambda : change("pink")).pack(side="left")Button(F1,text="Orange",command=lambda : change("orange")).pack(side="left")

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 87: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique87

Tracé à main levée.

Label(F2, text="Couleur du fond.").pack(side="left")Button(F2,text="Noir.",command=lambda : fond("black")).pack(side="left")Button(F2,text="Blanc",command=lambda : fond("white")).pack(side="left")Button(F2,text="Rouge.",command=lambda : fond("red")).pack(side="left")Button(F2,text="Vert",command=lambda : fond("green")).pack(side="left")Button(F2,text="Bleu",command=lambda : fond("blue")).pack(side="left")Button(F2,text="Jaune",command=lambda : fond("yellow")).pack(side="left")Button(F2,text="Orange",command=lambda : fond("orange")).pack(side="left")

trace = Canvas(F3)trace.pack()trace.bind("<Motion>", motion)trace.bind("<ButtonPress-1>", clic)trace.bind("<ButtonRelease-1>", noclic)

F1.pack(side="top")F2.pack(side="top")F3.pack(side="top")Button(Fp, text='Quitter', command = Fp.destroy).pack()Fp.mainloop()

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 88: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique88

Résultat.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 89: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique89

Les widgets.

Nom Fonction

Button Un bouton classique, peut être utilisé pour provoquer l'exécution d'unequelconque commande.

Canvas Un espace graphique utilisé pour dessiner, créer des éditeurs graphiques,ou implémenter des widgets personnalisés.

Checkbutton Case à cocher qui peut prendre deux états distincts (cochée ou non), unclic provoquant le changement d'état.

Entry Une zone d'entrée, dans lequel l'utilisateur pourra taper un textequelconque à partir du clavier.

Frame Widget contenant qui permet d'en grouper plusieurs autres.Il peut posséder une bordure ou un fond coloré.

Label Un texte, une image ou un bitmap prédéfini.

Listbox Un ensemble de choix présentés sous forme de liste. Elle peut êtreconfigurée pour se comporter en boutons radio ou en cases à cocher.

Menu Menu déroulant attaché à la barre de titre, ou bien un Menu contextuelapparaissant à la suite d'un clic.

Message Affichage de texte, variante du widget Label qui permet d'adapter le texteaffiché à une taille donnée ou à un rapport largeur/hauteur.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 90: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique90

Les widgets.

Nom Fonction

Radiobutton Valeur d’une variable parmi une liste de choix mutuellement exclusifs.

Scale Pour fixer visuellement une valeur numérique, en déplaçant un curseur lelong d'un axe.

Scrollbar Ascenseur ou barre de défilement utilisée en association avec d'autreswidgets : Canvas, Entry, Listbox, Text.

Text Affichage et édition de texte formaté.Possibilité d'insérer des images.

Toplevel Widget contenant affiché séparément, qui prend la main.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 91: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique91

Les options.

Option Action

Width Largeur du widget en unité de caractère dans la policedonnée par l’option font. Si négatif ou nul, le widgets’adapte automatiquement.

Menu

Nonconcernés

Height Hauteur du widget en unité de caractère dans la policedonnée par l’option font. Doit être au moins égale à 1.

Entry, Menu,Message, Scale,Scrollbar

background(bg) Couleur de l’arrière plan du widget.

foreground(bg) Couleur de l’avant plan du widget. Canvas, Frame,Scrollbar,Toplevel

Relief Effet 3D du widget (RAISED, SUNKEN, FLAT, RIDGE,SOLID et GROOVE).Indique comment l’intérieur duwidget apparaît par rapport à l'extérieur.

borderwidth(bd) Largeur de la bordure 3D à dessiner à l’extérieur duwidget si une telle bordure doit être dessinée, déterminépar l’option relief.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 92: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique92

Les options

Option Action

Takefocus Booléen indiquant si le widget accepte un focus enprovenance du clavier. <Shift –Tab>.

Nonconcernés

Highlightcolor Couleur du rectangle qui apparaît autour du widgetlorsque le focus du clavier le sélectionne.

Menu

highlightbackground

Couleur de la région autour du widget lorsque le focusdu clavier ne le sélectionne pas.

Menu

highlightthickness Valeur positive indiquant la largeur des bords durectangle du focus clavier.

Menu

Font Police du texte dans le widget. Canvas, Frame,Scrollbar,Toplevel

Cursor Curseur de la souris à utiliser à l'intérieur du widget.C. A

perg

his-

Tram

oni

C. Ape

rghi

s-Tra

mon

i

Page 93: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique93

Modification des options.

On dispose de méthodes pour consulter ou modifier les options d'un widget.

cget(option)Retourne la valeur courante de l'option sous forme d’une chaîne de caractère.

configure(option=valeur,…)config(option=valeur,…)

Permet la modification de la ou des options concernées.

keys()Retourne la liste de toutes les options modifiables.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i

Page 94: L'interface graphique.chris/Documents/Tkinter.pdf · 2008-02-12 · L'option "relief" détermine le type de bordure qui va encadrer le widget. Les choix sont : flat, groove, raised,

C. Aperghis-Tramoni Département d’Informatique94

Gestionnaire d'agencement.

Option Action

Grid Le gestionnaire d’agencement crée des affichages de style tableau, enorganisant les widgets dans une grille en deux dimensions.

Pack Ce gestionnaire d’agencement agence les widgets en les empaquetant dansun widget parent. Ils sont traités comme des blocs rectangulaires placésdans un cadre contenant.

Place C'est un gestionnaire d’agencement qui place explicitement un widget dansune position donnée.

C. Ape

rghi

s-Tra

mon

i

C. Ape

rghi

s-Tra

mon

i