[Niveau : Débutant]
[Python 3.5]

Bonjour,

j'essaie de m'approprier les bases de Python en me documentant ici et là, mais en réalisant un exercice, j'ai été confronté à un problème qui soulève un problème de compréhension de ma part sur mon propre code. Voici mon programme qui fonctionne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
 
import tkinter as tk
import random as rand
 
def affiche_calcul(a,b):
    return str(a)+"x"+str(b)+"="
 
def verification():
    if eval(zone_de_saisie.get()) == resultat:
        tk.Label(ma_fenetre, text ="Bien!").place(x = 20, y = 120)
    else:
        tk.Label(ma_fenetre, text ="Faux, la réponse est : "+str(resultat)).place(x = 20, y = 120)
 
 
a = rand.randint(1,10)
b = rand.randint(1,10)
resultat = a*b
 
ma_fenetre = tk.Tk()
ma_fenetre.title("Je vérifie que je connais mes tables")
ma_fenetre.geometry("400x600")
 
mon_bouton = tk.Button(ma_fenetre, text = "Vérifier", width = 20, command=verification)
affiche_calcul = tk.Label(ma_fenetre, text = affiche_calcul(a,b))
zone_de_saisie = tk.Entry(ma_fenetre)
 
affiche_calcul.place(x = 20, y = 60)
zone_de_saisie.place(x = 20, y = 80)
mon_bouton.place(x = 20, y = 100)
 
ma_fenetre.mainloop()
Avant d'en arriver là, j'avais tenté ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
 
import tkinter as tk
import random as rand
 
def affiche_calcul(a,b):
    return str(a)+"x"+str(b)+"="
 
 
a = rand.randint(1,10)
b = rand.randint(1,10)
resultat = a*b
 
ma_fenetre = tk.Tk()
ma_fenetre.title("Je vérifie que je connais mes tables")
ma_fenetre.geometry("400x600")
 
 
affiche_calcul = tk.Label(ma_fenetre, text = affiche_calcul(a,b))
if eval(tk.Entry(ma_fenetre).get()) == resultat:
    tk.Label(ma_fenetre, text ="Bien!").place(x = 20, y = 120)
else:
    tk.Label(ma_fenetre, text ="Faux, la réponse est : "+str(resultat)).place(x = 20, y = 120)
 
 
affiche_calcul.place(x = 20, y = 60)
zone_de_saisie.place(x = 20, y = 80)
 
 
 
 
ma_fenetre.mainloop()
La différence c'est que sur la première version, j'ai créé un bouton et une fonction qui est appelée lorsque je clique sur le bouton. Dans la deuxième, j'ai voulu faire sans l'utilisation d'un bouton. Donc j'ai voulu intégrer le corps de la fonction dans le programme principal. Seulement, la valeur mise dans la zone de saisie ne semble jamais être lue par le programme, malgré l'utilisation de la fonction .get().

J'imagine que le problème est événementiel, c'est ce que j'ai cru comprendre en lisant le FAQ, mais je ne parviens pas à l'identifier. Je ne comprends pas ce qu'il se passe (ou ne se passe pas).

Pourriez-vous m'expliquer, si vous voyez le problème?

Merci,