Bonjour,

Débutante en python 3 et avec Tkinter, je m'entraîne avec le livre de Swinnen. Je suis actuellement à l'exercice 13.4 où l'on nous fournit un programme dans lequel il faut rentrer une résistance en ohms et appuyer sur un bouton pour colorer les barres d'une résistance dessinée dans un canevas. L'exercice consiste en la suppression de ce bouton afin que le changement de couleur s'opère dès qu'on appuie sur la touche entrer du clavier. Je ne suis sûrement pas très claire alors, pour le code et les instructions initiales, veuillez vous rendre à la page 175 : http://www.irem.sciences.univ-nantes...thon_notes.pdf

Bref voilà mon problème: le programme marche mais quand je rentre ma résistance le changement opère un temps assez long après (et aléatoire j'ai l'impression) (entre 20 s et 1 minute).

Voilà mon 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
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
95
96
97
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('<Enter>', self.changeCoul_)
        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()
        #Code des couleurs : un petit projet bien encapsulé
 
    def changeCoul_(self, event):
        self.entree.get()
        self.changeCouleurs()
        print('rrr')
 
 
    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, 490, 100, width =3)
        # fils
        self.can.create_rectangle(150, 60, 350, 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(184,308,55):
            self.ligne.append(self.can.create_rectangle(x,60,x+22,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 < 10 or v > 1e11 :
            self.signaleErreur()
            li=[0,0,0]
            for n in range(3):
                self.can.itemconfigure(self.ligne[n], fill =self.cc[li[n]])
        # 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
Merci pour votre aide.