Afin de pouvoir personnaliser votre classeur sans détruire le classeur sur lequel travaille votre voisin, vous allez tout d'abord aller dans le menu File puis Make a copy.... Renommez le classeur en ajoutant votre nom à la fin du nom de fichier par exemple.

Texte variable et appel d'une fonction par un bouton

Nous allons élaborer dans ce classeur un programme simulant le lancer d'un dé à 6 faces : Lancez le programme ci-dessous et contemplez le résultat.

In [ ]:
from tkinter import *
from random import *

def NouveauLance():
    nb = randint(1,6)
    Texte.set('Résultat -> ' + str(nb))
    
# Création de la fenêtre principale (main window)
Mafenetre = Tk()
Mafenetre.title('Dé à 6 faces')

# Création d'un widget Button (bouton Lancer)
BoutonLancer = Button(Mafenetre, text ='Lancer', command = NouveauLance)

# Positionnement du widget avec la méthode pack()
BoutonLancer.pack(side = LEFT, padx = 5, pady = 5)

# Création d'un widget Button (bouton Quitter)
BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
BoutonQuitter.pack(side = LEFT, padx = 5, pady = 5)
Texte = StringVar()

# On appellle une fois la fonction pour initialiser notre Texte
NouveauLance()
# La fonction NouveauLance() sera ensuite appelée via le bouton "Lancer"

# Création d'un widget Label (texte 'Résultat -> x')
LabelResultat = Label(Mafenetre, textvariable = Texte, fg ='red', bg ='white')
LabelResultat.pack(side = LEFT, padx = 5, pady = 5)
Mafenetre.mainloop()

Dans cet exemple, vous remarquerez plusieurs points intéressants :

  • La fenêtre possède un vrai titre à présent et pas le titre standard TK
  • Nous avons ajouté un bouton Lancer. Lorsque celui-ci est pressé, la fonction Python NouveauLance() est appelée
  • Le texte du label est modifié. Cela nécessite une petite explication ...

Modification du texte d'un objet

Sous TKinter, le texte d'un Label est déterminé au moment de sa création et il n'y a plus moyen de le modifier par la suite. Or dans cet exemple, nous voulons bien sur modifier le texte. Nous utilisons donc pour cela un nouvel objet de TKinter : le StrinVar(). La ligne

Texte = StringVar()

permet de créer un objet StringVar accessible par la variable Texte.

Nous indiquons ensuite lors de la création du Label que son texte sera variable et que son contenu sera accessible par la variable Texte :

LabelResultat = Label(Mafenetre, textvariable = Texte, fg ='red', bg ='white')

La dernière chose qu'il nous reste à apprendre, c'est modifier le texte de cet objet StringVar. Cela est réalisé par l'appel de la méthode set sur l'objet Texte :

Texte.set('Résultat -> ' + str(nb))

Appel d'une fonction Python par un bouton

Dans cet exemple, l'appui sur le bouton Lancer appelle une fonction que nous avons élaboré nous-même. Il est en effet très simple avec TKinter de relier l'appui sur un bouton avec l'appel d'une fonction. C'est ce que l'on fait par :

BoutonLancer = Button(Mafenetre, text ='Lancer', command = NouveauLance)

Disposition à l'horizontal

Vous constatez que contrairement à l'exemple précédent, les widgets sont disposés horizontalement dans la fenêtre. Ceci se fait en passant des paramètres particuliers à la méthode pack() que nous avons déjà rencontrée :

BoutonLancer.pack(side = LEFT, padx = 5, pady = 5)

  • side=LEFT permet de disposer les objets de la gauche vers la droite (par défaut, c'est de haut en bas)
  • padx et pady permettent de laisser un petit espace entre les widgets pour aérer la disposition

A vous de jouer

Modifier cette application afin d'afficher le nombre de 6 qui ont été tirés et le nombre de coups au total. Vous pouvez vous inspirer de l'illustration ci-dessous :

In [ ]:
from tkinter import *
from random import *

# Votre programme ici