Bonjour

Merci pour le temps que vous passez à lire les messages des débutants comme moi. :-)

Je suis en train de commencer à apprendre à programmer en Python. Mon projet actuel est assez simple :
créer une fenêtre qui va afficher des "cartes flashs" correspondant à des listes. Des boutons serviront pour passer à la carte précédente ou suivante. (Je suis professeur en école primaire et ça me servirait comme application d'apprentissage)

J'ai commencé à utiliser les "class" (Ce qui me procura un grand plaisir quand ça fonctionna pour la première fois :-D )
Cependant, je suis bloqué sur l'action des boutons.

J'ai créé une fonction qui devrait être activée par une pression sur le bouton, mais rien ne se passe...
  • Ou la variable "i" n'évolue pas comme je l'imagine (elle ne bouge pas), mais je ne sais pas encore utiliser un débogueur pour observer ça...
  • Ou c'est la fenêtre qui ne se rafraîchit pas, et donc qui ne prend pas en compte l'évolution de ma variable "i".

Je penche plus vers la seconde hypothèse, mais on ne sait jamais...

Voici mon code. Pourriez-vous m'orienter ?

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
 
# Création d'une fenetre pour afficher les flash cards affichant une image et 4 informations
# en utilisant les objets
# Tutoriel sur les objets : https://www.youtube.com/watch?v=dfUM_9xibf8
# Import de la bibliothèque TKinter
from tkinter import *
 
########################
#    Partie logique    #
########################
 
# Création d'une "classe" contenant les information d'une "flash card"
class FlashCard:
 
    def __init__(self, num, pers, act, obj):   # Constructeur de classe
        self.num = num          # Création d'un nouvel attribut qui se verra affecter la valeur de la variable
        self.pers = pers
        self.act = act
        self.obj = obj
        # self.img = img        # Pour plus tard
 
    def get_num(self):          # Création d'une méthode (fonction dans une classe) "Geter" ou "Assesseur" dans ce cas, pour récupérer une info
        return self.num
 
    def get_pers(self):
        return self.pers
 
    def get_obj(self):
        return self.obj
 
    def get_act(self):
        return self.act
 
    def incr_num(self):         # Création d'une méthode : un "Seter" ou "Mutateur" dans ce cas pour modifier une info
        self.num += 1
 
    def decr_num(self):
        self.num -= 1
 
 
# Création de listes contenant les données à afficher
liste_pers = ["Dompteur", "Adam", "Lucy", "Pythagore", "Français", "Mime"]
liste_obj = ["Des anneaux pour sauter", "Une pomme", "Un gourdin", "Une équère", "Une baguette", "Des gants blancs"]
liste_act = ["Dompter un fauve", "Manger une pomme", "Taper avec un gourdin", "Mesurer un angle", "Manger une baguette", "Mimer en silence"]
 
# Variable permettant de choisir quelle carte sera affichée
i = 0
 
 
# Fonction permettant d'incrémenter le numéro de la carte à afficher
def incr_i():
    global i
    i += 1
 
 
# Instance de classe
carte_i = FlashCard(i, liste_pers[i], liste_obj[i], liste_act[i])
 
print("Cartes en mémoire : ")
 
##########################
#    Partie affichage    #
##########################
 
# Création d'une fenêtre TK
root = Tk()
# Définir la couleur de fond de la fenêtre
root.configure(bg="white")
 
 
# Création d'une fonction d'affichage d'une fenêtre contenant les textes de la classe
def affiche_cart():
 
    num_carte = Label(root, text=str(carte_i.get_num()), bg="white", width=5, font=("Courier Bold", 30))      # Création d'un Label
    pers_carte = Label(root, text=str(carte_i.get_pers()), bg="#f2f8a7", width=25)
    obj_carte = Label(root, text=str(carte_i.get_obj()), bg="#b7e8e6", width=25)
    act_carte = Label(root, text=str(carte_i.get_act()), bg="#d8b7e8", width=25)
    btn_next = Button(root, text="Suivant >", command=incr_i())
 
    num_carte.pack(padx=10, pady=10)           # Placement du Label
    pers_carte.pack(padx=10, pady=10)
    obj_carte.pack(padx=10, pady=10)
    act_carte.pack(padx=10, pady=10)
    btn_next.pack(padx=10, pady=10)
 
    root.mainloop()
 
 
print("Personnes : ", liste_pers)
print("Actions : ", liste_act)
print("Objets : ", liste_obj)
 
# Appel de la fonction d'affichage de la carte correspondant à i
affiche_cart()
Merci beaucoup !