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
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()
ihm.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()
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
 
# 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)