Bonjour,

je me forme avec l'aide de l'exellent livre de gérard swinnen, et la je bloque completement sur un exercice.

J'en suis au chapitre 13 et je fais l'exercice 13.4 qui consiste a rajouter sur la zone de saisie un bind sur la touche "entré" pour valider la saisie.

mais je bloque sur l'erreur suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
TypeError: validChangeCouleur() takes 1 positional argument but 2 were given
voici mon code, j'ai créer une méthode dans mon objet qui appelle la méthode de changement de couleurs avec bien sur dans la phase d'init un bind de la touche entré.

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
#!/usr/bin/env python3
# coding=utf-8
 
class Application(object):
    def __init__(self):
        """Constructeur de la fenêtre principale"""
        self.root =Tk()
        self.root.title('Code des couleurs')
        self.dessineResistance()
        Label(self.root, text ="Entrez la valeur de la résistance, en ohms :").\
            grid(row =2, column =1, columnspan =3)
        Button(self.root, text ='Montrer', command =self.changeCouleurs).\
            grid(row =3, column =1)
        Button(self.root, text ='Quitter', command =self.root.quit).\
            grid(row =3, column =3)
        self.entree = Entry(self.root, width =14)
        self.entree.bind('<Return>', self.validChangeCouleur)
        self.entree.grid(row =3, column =2)
        # Code des couleurs pour les valeurs de zéro à neuf :
        self.cc = ['black','brown','red','orange','yellow',
            'green','blue','purple','grey','white']
        self.root.mainloop()
 
    def validChangeCouleur(Event):
        self.changeCouleurs()
 
    def dessineResistance(self):
        """Canevas avec un modèle de résistance à trois lignes colorées"""
        self.can = Canvas(self.root, width=500, height =200, bg ='light blue')
        self.can.grid(row =1, column =1, columnspan =3, pady =5, padx =5)
        self.can.create_line(10, 100, 480, 100, width =3)         # fils
        self.can.create_rectangle(65, 60, 420, 140, fill ='beige', width =2)
        # Dessin des trois lignes colorées (noires au départ) :
        self.ligne =[]            # on mémorisera les trois lignes dans 1 liste
        for x in range(85,190,40):
            self.ligne.append(self.can.create_rectangle(x,60,x+30,140,
                fill='black',width=0))
 
    def changeCouleurs(self):
        """Affichage des couleurs correspondant à la valeur entrée"""
        self.v1ch = self.entree.get()       # cette méthode renvoie une chaîne
        try:
            v = float(self.v1ch)            # conversion en valeur numérique
        except:
            err =1                          # erreur : entrée non numérique
        else:
            err =0
        if err ==1 or v < 1 or v > 1e11 :
            self.signaleErreur()            # entrée incorrecte ou hors limites
        else:
            li =[0]*3                       # liste des 3 codes à afficher
            logv = int(log10(v))          # partie entière du logarithme
            if logv==0:
                ordgr=1
                li[0]=0
            else:
                ordgr = 10**logv                # ordre de grandeur
                # extraction du premier chiffre significatif :
                li[0] = int(v/ordgr)            # partie entière
            decim = v/ordgr - li[0]         # partie décimale
            # extraction du second chiffre significatif :
            if logv==0:
                li[1] = int(decim)       #
                li[2] = logv 
            else:
                li[1] = int(decim*10 +.5)       # +.5 pour arrondir correctement
                # nombre de zéros à accoler aux 2 chiffres significatifs :
                li[2] = logv -1
 
            # Coloration des 3 lignes :
            for n in range(3):
                self.can.itemconfigure(self.ligne[n], fill =self.cc[li[n]])
 
    def signaleErreur(self):
        self.entree.configure(bg ='red')            # colorer le fond du champ
        self.root.after(1000, self.videEntree)      # après 1 seconde, effacer
        for n in range(3):
                self.can.itemconfigure(self.ligne[n], fill=self.cc[0])
 
 
    def videEntree(self):
        self.entree.configure(bg ='white')          # rétablir le fond blanc
        self.entree.delete(0, len(self.v1ch))       # enlever les car. présents
 
# Programme principal :
if __name__ == '__main__':
    from tkinter import *
    from math import log10               # logarithmes en base 10
 
    f = Application()
je suis conscient que le bug est entre la chaise et le clavier ;=)

je vous remercie de m'apporter les éclaircissement nécessaire à a mon ignorance.

cordialement.