Créer un pavé numérique

ghmesnil   23 mars 2016   Commentaires fermés sur Créer un pavé numérique

L’objectif de cet article est de vous montrer comment on peut créer un pavé numérique avec Tkinter. Dans cet exemple, le pavé possède 9 touches numérotées par des nombre aléatoires compris entre 1 et 9. A chaque fois que l’on clique sur un bouton du pavé, celui-ci se désactive et un message apparaît dans la fenêtre. Le bouton ‘Recommencer’ permet de réactiver le pavé.

clavier

Voici la marche à suivre pas à pas pour obtenir cette petite application.

1/ Mise en place de la fenêtre Tkinter

Cette fenêtre possède une sous-fenêtre appelée Clavier sur laquelle on positionnera plus tard les boutons du pavé, ainsi qu’un bouton Quitter pour fermer l’application.

from tkinter import *
from random import *

######################################
# variables globales
###########################################
# à remplir plus tard

###################################### 
# fonctions 
########################################### 
# à remplir plus tard 

###################################### 
# fenêtre graphique 
########################################### 
fenetre=Tk() 
fenetre.geometry('250x200') 

# bouton pour quitter l'application 
BoutonQuitter=Button(fenetre,text='Quitter',command=fenetre.destroy) 
BoutonQuitter.pack(side=BOTTOM) 

# espace d'affichage du clavier 
Clavier=Frame(fenetre,width=302, height=302, bg="#ffffff") 
Clavier.pack() 

fenetre.mainloop()

2/ Mise en place du pavé numérique

Le pavé possède 9 boutons alignés en trois rangées de trois. Les boutons sont des éléments de la liste Numero. L’ordre de numérotation des boutons se fait en partant en haut à gauche et en parcourant les lignes du clavier de gauche à droite, du haut vers le bas comme indiqué ci-dessous.

Clavier2

Si L est une liste composée de neuf nombres aléatoire, alors sur le bouton noté Numero[k] est inscrit le nombre L[k].

L’affichage de ces boutons dans la fenêtre Clavier se fait à l’aide de la méthode grid() ; le bouton Numero[k] est placé à l’intersection de la ligne i et la colonne ji et j sont respectivement le quotient et le reste de la division de k par 3 (i = k//3 et j = k%3).

En cliquant sur le bouton Numero[k], on lance la fonction choisir. Celle-ci possède un paramètre qui correspond à l’indice de ce bouton dans la liste Numero. La rédaction de l’appel à cette fonction est un peu spéciale…

  • Initialisation de la liste L

L=[randint(1,9) for k in range(9)]
  • Mise en place des boutons

Numero=[0 for k in range(9)]
for k in range(9):
        Numero[k]=Button(Clavier,text=str(L[k]),command=lambda x=k: choisir(x))
        Numero[k].grid(row=k//3,column=k%3)
  • Mise en place d’un espace pour afficher un message

# espace d'affichage du texte
Message=Label(fenetre,text='Cliquez sur un bouton\ndu pavé numérique.')
Message.pack()
  • Rédaction de la fonction choisir

def choisir(x):
    # fonction qui s'exécute lorsque l'on clique sur le bouton d'indice x de la liste Numero.
    # elle désactive le bouton Numero[x] et affiche un texte.
    Numero[x].configure(state='disabled')
    Message.configure(text='Vous avez choisi la case '+str(x)+'.\nLe nombre '+str(L[x])+' est écrit dessus.')

3/ Pour finir, mise en place d’un bouton pour réactiver les boutons de la liste Numero

Dans la partie Tkinter :

# bouton permettant de réactiver le clavier
BoutonRecommencer=Button(fenetre,text='Réactiver',command=reactiver)
BoutonRecommencer.pack()

Dans la partie réservée aux fonctions :

def reactiver():
    for k in range(9):
        Numero[k].configure(state='normal')

4/ Le code complet

from tkinter import *
from random import *

############################################
# variables globales
###########################################
L=[randint(1,9) for k in range(9)]

############################################
# fonctions
###########################################
def reactiver():
    for k in range(9):
        Numero[k].configure(state='normal')


def choisir(x):
    # fonction qui s'exécute lorsque l'on clique sur le bouton d'indice x de la liste Numero.
    # elle désactive le bouton Numero[x] et affiche un texte.
    Numero[x].configure(state='disabled')
    Message.configure(text='Vous avez choisi la case '+str(x)+'.\nLe nombre '+str(L[x])+' est écrit dessus.')



############################################
# fenêtre graphique
###########################################
fenetre=Tk()
fenetre.geometry('250x200')

# bouton pour quitter l'application
BoutonQuitter=Button(fenetre,text='Quitter',command=fenetre.destroy)
BoutonQuitter.pack(side = BOTTOM)

# espace d'affichage du clavier
Clavier=Frame(fenetre,width=302, height=302, bg="#ffffff")
Clavier.pack()
Numero=[0 for k in range(9)]
for k in range(9):
        Numero[k]=Button(Clavier,text=str(L[k]),command=lambda x=k: choisir(x))
        Numero[k].grid(row=k//3,column=k%3)

# espace d'affichage du texte
Message=Label(fenetre,text='Cliquez sur un bouton\ndu pavé numérique.')
Message.pack()

# bouton permettant de réactiver le clavier
BoutonRecommencer=Button(fenetre,text='Réactiver',command=reactiver)
BoutonRecommencer.pack()

fenetre.mainloop()