« Programmation Python/Classes et Interfaces graphiques » : différence entre les versions

Contenu supprimé Contenu ajouté
Tavernier (discussion | contributions)
modification du code exemple en quelque chose de copicollable
Ligne 37 :
 
<pre>
1.class Application: #1
2. def __init__(self): #2
3. """Constructeur de la fenêtre principale""" #3
4. self.root =Tk() #4
5. self.root.title('Code des couleurs') #5
6. self.dessineResistance() #6
7. Label(self.root, #7
8. text ="Entrez la valeur de la résistance, en ohms :").grid(row =2) #8
9. Button(self.root, text ='Montrer', #9
10. command =self.changeCouleurs).grid(row =3, sticky = W) #10
11. Button(self.root, text ='Quitter', #11
12. command =self.root.quit).grid(row =3, sticky = E) #12
13. self.entree = Entry(self.root, width =14) #13
14. self.entree.grid(row =3) #14
15. # Code des couleurs pour les valeurs de zéro à neuf : #15
16. self.cc = ['black','brown','red','orange','yellow', #16
17. 'green','blue','purple','grey','white'] #17
18. self.root.mainloop() #18
#19
19.
20. def dessineResistance(self): #20
21. """Canevas avec un modèle de résistance à trois lignes colorées""" #21
22. self.can = Canvas(self.root, width=250, height =100, bg ='ivory') #22
23. self.can.grid(row =1, pady =5, padx =5) #23
24. self.can.create_line(10, 50, 240, 50, width =5) # fils #24
25. self.can.create_rectangle(65, 30, 185, 70, fill ='light grey', width =2) #25
26. # Dessin des trois lignes colorées (noires au départ) : #26
27. self.ligne =[] # on mémorisera les trois lignes dans 1 liste #27
28. for x in range(85,150,24): #28
29. self.ligne.append(self.can.create_rectangle(x,30,x+12,70, #29
30. fill='black',width=0)) #30
#31
31.
32. def changeCouleurs(self): #32
33. """Affichage des couleurs correspondant à la valeur entrée""" #33
34. self.v1ch = self.entree.get() # la méthode get() renvoie une chaîne #34
try: #35
35. try:
36. v = float(self.v1ch) # conversion en valeur numérique #36
37. except: #37
38. err =1 # erreur : entrée non numérique #38
else: #39
39. else:
40. err =0 #40
41. if err ==1 or v < 10 or v > 1e11 : #41
42. self.signaleErreur() # entrée incorrecte ou hors limites #42
else: #43
43. else:
44. li =[0]*3 # liste des 3 codes à afficher #44
45. logv = int(log10(v)) # partie entière du logarithme #45
46. ordgr = 10**logv # ordre de grandeur #46
47. # extraction du premier chiffre significatif : #47
48. li[0] = int(v/ordgr) # partie entière #48
49. decim = v/ordgr - li[0] # partie décimale #49
50. # extraction du second chiffre significatif : #50
51. li[1] = int(decim*10 +.5) # +.5 pour arrondir correctement #51
52. # nombre de zéros à accoler aux 2 chiffres significatifs : #52
53. li[2] = logv -1 #53
54. # Coloration des 3 lignes : #54
55. for n in range(3): #55
56. self.can.itemconfigure(self.ligne[n], fill =self.cc[li[n]]) #56
#57
57.
58. def signaleErreur(self): #58
59. self.entree.configure(bg ='red') # colorer le fond du champ #59
60. self.root.after(1000, self.videEntree) # après 1 seconde, effacer #60
#61
61.
62. def videEntree(self): #62
63. self.entree.configure(bg ='white') # rétablir le fond blanc #63
64. self.entree.delete(0, len(self.v1ch)) # enlever les car. présents #64
#65
65.
66.# Programme principal : #66
67.from Tkinter import * #67
68.from math import log10 # logarithmes en base 10 #68
69.f = Application() # instanciation de l'objet application #69
</pre>