Bonjour,
Je suis en train de faire tous les exercices du cours Python : cours Python de Swinnen, et je suis bloqué à l'ex 13.4 page 177. C'est à propos d'une petite application qui donne la visualisation d'une résistance quand on entre sa valeur (en ohm) dans un champ.
Là où je bute (c'est le sujet de l'exercice), c'est quand il faut taper sur <Return> pour mettre à jour la visualisation.
Voici le code original :
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
 
#! /usr/bin/env python
# -*- coding: Latin-1 -*-
 
class Application:
    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)
        Button(self.root, text ='Montrer',
               command =self.changeCouleurs).grid(row =3, sticky = W)
        Button(self.root, text ='Quitter',
               command =self.root.quit).grid(row =3, sticky = E)
        self.entree = Entry(self.root, width =14)
        self.entree.grid(row =3)
        # 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 dessineResistance(self):
        """Canevas avec un modèle de résistance à trois lignes colorées"""
        self.can = Canvas(self.root, width=250, height =100, bg ='light blue')
        self.can.grid(row =1, pady =5, padx =5)
        self.can.create_line(10, 50, 240, 50, width =5)         # fils
        self.can.create_rectangle(65, 30, 185, 70, 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,150,24):
            self.ligne.append(self.can.create_rectangle(x,30,x+12,70,
                                                        fill='black',width=0))
 
    def changeCouleurs(self):
        """Affichage des couleurs correspondant à la valeur entrée"""
        self.v1ch = self.entree.get()       # la méthode get() 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 < 10 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
            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 :
            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
 
    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()                       # instanciation de l'objet application
et voici mon code, où j'ai ajouté une fonction changeCoul__, qui ne fonctionne pas :
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
 
#! /usr/bin/env python
# -*- coding: Latin-1 -*-
 
class Application:
    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)
        #Button(self.root, text ='Montrer',
        #      command =self.changeCouleurs).grid(row =3, sticky = W)
        Button(self.root, text ='Quitter',
               command =self.root.quit).grid(row =3, sticky = E)
        self.entree = Entry(self.root, width =14)
        # ajout
        self.entree.bind("<Return>", self.changeCoul__)
        self.entree.grid(row =3)
        # 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 changeCoul__(event, self):
        changeCouleurs(self)
        print 'toto'
 
 
    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, pady =5, padx =5)
        self.can.create_line(10, 50, 240, 50, width =3)         # fils
        self.can.create_rectangle(65, 30, 185, 70, fill ='beige', width =5)
        # 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,150,24):
            self.ligne.append(self.can.create_rectangle(x,30,x+12,70,
                                                        fill='black',width=0))
 
    def changeCouleurs(self):
        """Affichage des couleurs correspondant à la valeur entrée"""
        self.v1ch = self.entree.get()       # la méthode get() 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 < 10 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
            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 :
            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
 
    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()                       # instanciation de l'objet application
Quelqu'un pourrait il m'aider ?