Bonjour à tous,

J'essaye d'apprendre la POO sous Python avec le livre de Swinnen, et là je bute sur un exo non corrigé.
Cela consiste à modifier un programme pour qu'un champ entry soit validé par la touche Return et non par le bouton montrer.
J'ai utilisé la méthode bind et j'ai ajouté la ligne suivante (ligne 15) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
self.entree.bind('<Return>',self.changeCouleurs)
Mais lorsque je presse Return j'obtiens le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
TypeError: changeCouleurs() takes 1 positional argument but 2 were given
Je n'ai pas l'impression de passer deux arguments à la méthode changeCouleurs.
Si quelqu'un pouvait m'expliquer, merci d'avance.


Voici l'intégralité du programme :


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
from random import randrange
 
class Application(object):
      "Voici une classe de résistance"
 
 
      def __init__(self):
            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.destroy).grid(row=3, column=3)
            self.entree=Entry(self.root,width=14)
            self.entree.bind('<Return>',self.changeCouleurs)
            self.entree.grid(row=3, column=2)
 
            self.cc=['black', 'brown','red','orange', 'yellow', 'green', 'blue','purple', 'grey','white']
            self.root.mainloop()
 
      def dessineResistance(self):
            self.can=Canvas(self.root, width=500, height=200, bg='cornflower blue')
            self.can.grid(row=1,column=1, columnspan=3, padx=5, pady=5)
            self.can.create_line(20,100,480,100,width=6)
            self.can.create_rectangle(130,60,370,140,fill='beige', width=4)
            self.ligne=[]
            for x in range(170,300,48):
                  self.ligne.append(self.can.create_rectangle(x,62,x+36,138, fill='black', width=0))
 
      def changeCouleurs(self):
            """Affichage des couleurscorrespondant à la valeur entrée"""
            self.v1ch=self.entree.get()
            try:
                  v=float(self.v1ch)
            except:
                  err=1
            else:
                  err=0
            if err==1 or v<10 or v>1e11:
                  self.signaleErreur()
            else:
                  li=[0]*3
                  logv=int(log10(v))
                  ordgr=10**logv
                  li[0]=int(v/ordgr)
                  decim=v/ordgr-li[0]
                  li[1]=int(decim*10+0.5)
                  li[2]=logv-1
                  for n in range(3):
                        self.can.itemconfigure(self.ligne[n], fill=self.cc[li[n]])
 
      def signaleErreur(self):
            self.entree.configure(bg='red')
            for n in range(3):
                        self.can.itemconfigure(self.ligne[n], fill='black')
            self.root.after(1000,self.videEntree)
 
      def videEntree(self):
            self.entree.configure(bg='white')
            self.entree.delete(0,len(self.v1ch))
 
if __name__=='__main__':
      from tkinter import*
      from math import log10
      f=Application()