En programmation évènementielle, il est primordial de bien séparer :
from tkinter import *
# GESTIONNAIRE D'ENVENEMENT "CLIC BOUTON"
def appui():
'''Rôle de cette fonction :
UNIQUEMENT modifier le texte dans les étiquettes,
surtout pas de CREER des widgets !!
'''
texte1.set("Fallait pas appuyer...")
texte2.set("BOUM !!")
# INTERFACE
fen = Tk()
fen.title("ATTENTION")
b = Button(fen, text = "DANGER", command = appui)
b.grid(row = 0, column = 0)
texte1 = StringVar() # variable de contrôle associée à l'étiquette du bas
texte1.set("Surtout ne pas appuyer sur ce bouton !")
l1 = Label(fen, textvariable = texte1)
l1.grid(row = 1, column = 0)
texte2 = StringVar() # variable de contrôle associée à l'étiquette à droite
texte2.set("") # pour l'instant, rien n'est affiché dans cette étiquette
l2 = Label(fen, textvariable = texte2)
l2.grid(row = 0, column = 1)
fen.mainloop()
from tkinter import *
from random import randint
nombre = randint(1, 100)
# GESTIONNAIRE D'EVENEMENT
def evaluer():
entree = int(prop.get()) # lecture de l'entrée utilisateur, et conversion en entier
if entree < nombre:
r.set("Trop petit")
elif entree > nombre:
r.set("Trop grand")
else:
r.set('BRAVO !')
# INTERFACE
fen = Tk()
fen.title('Nombre à deviner')
prop = Entry(fen) # champ d'entrée de la proposition utilisateur
prop.pack()
val = Button(fen, text ='OK', command = evaluer)
val.pack()
r = StringVar()
res = Label(fen, textvariable = r)
res.pack()
fen.mainloop()
from tkinter import *
def joue(event): # 'event' est un argument passé implicitement au gestionnaire d'évènement lors du clic souris
global joueur # rend "globale la variable 'joueur', c'est à dire permet de modifier une variable définie dans le programme principal
ligne = (event.y) // 100 # calcul du numéro de ligne
colonne = (event.x) // 100 # et de colonne du clic
if grille[ligne][colonne] == 0 : # si la case n'a pas encore été jouée
grille[ligne][colonne] = joueur # alors on indique quel joueur aura joué dans cette case.
if joueur == 1: # si le joueur courant est le joueur 1,
can.create_line(colonne*100 + 10,ligne*100+10,colonne*100+90,ligne*100+90,fill='white', width = 5) # alors on trace une croix dans la case,
can.create_line(colonne*100+10,ligne*100+90,colonne*100+90,ligne*100+10,fill='white', width = 5)
joueur = 2 # et on change de joueur.
else:
can.create_oval(colonne*100 + 10,ligne*100+10,colonne*100+90,ligne*100+90,outline='white', width = 5) # sinon, on trace un cercle dans la case,
joueur = 1 # et on change de joueur
# INITIALISATION DU JEU
grille = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] # matrice représentant la grille du jeu; utlisée pour savoir si une case est déja jouée. 0 = case vide, 1 = joueur 1, 2 = joueur 2
joueur = 1 # joueur courant; le joueur 1 ( = ronds ) joue en premier
# INTERFACE
fen = Tk()
fen.title('Morpion')
can = Canvas(fen, width = 300, height = 300, background='black') # canevas = zone de dessin
can.pack()
can.bind('', joue) # association de l'évènement 'clic bouton gauche souris' au gestionnaire d'évènement 'joue'
# tracé des lignes de la grille
can.create_line(100,10,100,290,fill='white', width = 3)
can.create_line(200,10,200,290,fill='white', width = 3)
can.create_line(10,100,290,100,fill='white', width = 3)
can.create_line(10,200,290,200,fill='white', width = 3)
fen.mainloop()