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 |
Partager