Bonjour à tous,
Cela fait plusieurs année que je ne code plus et je me suis lancé dans un petit programme en python, que je découvre, qui doit me permettre de saisir une valeur décimale, la convertir en binaire. Une fois converti j'ai un octet représenté par des LED qui vont être verte si la valeur est 1.
Mon problème :
Je n'arrive plus à débugger mon programme. J'ai les led qui ne s'affiche pas.
J'ai 3 fichiers :
- Un fichier "main.py" qui lance l'application.
- Un fichier "ihm.py" qui contient mon IHM.
- Un fichier "fonctions.py" qui contient des fonctions utilitaires.
Voici mon code :
Main.py
ihm.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 # coding : utf-8 from ihm import * window = ihm() window.maFenetre.mainloop()
fonctions.py
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 # coding : utf-8 import tkinter as tk import fonctions as fc class ihm : def __init__(self): # Création de la fenêtre self.maFenetre = tk.Tk() self.maFenetre.title("BINAIRE") self.maFenetre.geometry("800x300") self.maFenetre.minsize(480, 300) self.maFenetre.iconbitmap("images/binaire.ico") # Création d'un frame self.frame = tk.Frame(self.maFenetre) self.led(self) self.labelInfo(self) self.saiDecimal(self) self.labelResult(self) self.btn(self) self.affichage(self) def led(self, arg): # Ajout de ma led largeur = 60 # Largeur de la led hauteur = 60 # Hauteur de la led nbLed = 8 # Nombre de led # Initialisation du tableau de led elem = tuple({} for i in range(nbLed)) # Création des leds for i in range(nbLed): elem[i]["led"] = tk.PhotoImage(file="images/led_green.png") elem[i]["canvas"] = tk.Canvas(self.frame, width=largeur, height=hauteur) elem[i]["canvas"].create_image(largeur / 2, hauteur / 2, image=elem[i]["led"]) elem[i]["canvas"].grid(row=0, column=i) # for def labelInfo(self,arg): # Création d'un label labelDeci = tk.Label(self.frame, text="Votre valeur décimale : ") labelDeci.grid(row=2, column=0, columnspan=2) def saiDecimal(self,arg): # Création d'un champ de saisie valDeci = tk.Entry(self.frame) valDeci.grid(row=2, column=2, columnspan=2) def labelResult(self,arg): result = tk.Label(self.frame) result.grid(row=2, column=6) def btn(self,arg): # Création d'un bouton pour la convertion btnConvert = tk.Button(self.frame, text="Convertir", command=lambda: fc.controle(self.valDeci.get(), self.result)) btnConvert.grid(row=2, column=4) # Création d'un bouton close btnClose = tk.Button(self.frame, text="Fermer", command=self.maFenetre.destroy) btnClose.grid(row=6, column=0) def affichage(self,arg): # Affichage de la frame print("Affichage") self.frame.pack() #self.mainloop()
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 # coding : utf-8 class fonctions : def dec2bin(d,nb=0): """dec2bin(d,nb=0): conversion nombre entier positif ou nul -> chaîne binaire (si nb>0, complète à gauche par des zéros)""" if d == 0: b = "0" else: b = "" while d != 0: # d&1 correspondant à d%2 ou d modulo 2 (= reste de la division entière par 2) # "01"[0] donne "0" # "01"[1] donne "1" b = "01"[d & 1]+b # d>>1 correspond à d//2 (= division entière par 2) d = d >> 1 # b.zfill(nb) complète b de 0 à gauche afin d'avoir la chaîne à la longueur demandée return b.zfill(nb) def convertir(nb, sai_result): print(nb) try: binaire = fonctions.dec2bin(int(nb), 8) print(binaire) sai_result['text'] = binaire for i in range(8): if int(binaire[i]) == 1: print("Led verte") else: print("led rouge") except ValueError: print("La valeur saisie n'est pas convertible") def controle(nb, sai_result): if nb == "": print("Veuillez saisir une valeur") elif int(nb) > 255: print("Veuillez saisir une valeur entre 0 et 255") else: fonctions.convertir(nb, sai_result)
Partager