Bonjour à tous !

Il m'a été donné un exercice en cours qui, je cite, consistait à :
"Réaliser un programme en langage Python pour :

"Créer une image 8x8 au format pgm ou png permettant de coder 8 caractères de telle sorte que sur chaque ligne, on retrouve le code binaire de la lettre. On codera par un pixel 'noir' le '0' et un pixel 'blanc' le '1'.
Afficher une image représentant un flashcode à l'aide du module Tkinter à partir d'un fichier image 8x8 au format pgm ou png.
Lire une image 8x8 au format pgm ou png pour afficher le message ainsi codé.
"
Je suis alors arrivé, avec beaucoup de difficulté, au programme suivant :

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
import os
from PIL import Image
from tkinter import Tk
from tkinter import Canvas
from tkinter import Button
from tkinter import Label
 
def puissance(base, exposant):   #On définit la fonction puissance
    S = 1
    for i in range(1, exposant+1):
        S = S * base
    return S
 
while 1:                    # boucle sur le choix
 
    print("         1 - Créer un flash-code à partir d'un mot de 8 caractères ASCII\n")          
    print("         2 - Afficher un flash-code à partir d'un fichier image png8x8\n")
    print("         3 - Décoder un flash-code à partir d'un fichier image png8x8\n")
    print("         4 - Sortie\n")
 
    Choix = input("Faites votre choix :\n")
 
 
    #Choix 1 : Création du fichier png à partir de la saisie de 8 caractères
 
 
    if Choix=='1':                               
        Mot_binaire =[[]]
        for i in range(8):    # boucle pour entrer les 8 caractères
            lettre=input("Entrez une lettre : ")
            chiffrebin=bin(ord(lettre))
            #print("numero de la lettre=",ord(lettre),'\n')
            #print("chiffrebin=",chiffrebin,'\n')
            #print("len=",len(chiffrebin),'\n')
            Mot_binaire.append(chiffrebin)
        #
        L,H=8,8
        im1=Image.new("RGB",(L,H))  # creation d'une image 8x8
        for y in range(H):
            #print("Mot_binaire[y+1]=",Mot_binaire[y+1])
            longmot = len(Mot_binaire[y+1])
            x=0
            r,v,b=0,0,0   # 0,0,0 correspond à un pixel noir
            im1.putpixel((x,y),(r,v,b))     # on met un pixel Noir en premier
            if longmot == 8:
                im1.putpixel((x+1,y),(r,v,b)) # si 8, alors on met 2eme pixel Noir
            for x in range(2,longmot,1):          # pour chaque bit
                if Mot_binaire[y+1][x]=='0': 
                    gris=0              # si bit = 0 ,on met pixel noir
                else:
                    gris=255            # si bit = 1 , on met pixel blanc
                r,v,b=gris,gris,gris
                if longmot == 9:
                    im1.putpixel((x-1,y),(r,v,b))
                else:
                    im1.putpixel((x,y),(r,v,b))
        fichier = input("Entrez le nom du fichier image à créer (.png) ? ")
        chemin  = input("Entrez le nom du répertoire ou stocker l'image ? ")
        NomComplet = chemin+fichier         
        im1.save(NomComplet)             # Sauvegarde du fichier png
        print("Le fichier ",NomComplet," a été correctement sauvé\n")
 
    #-----------------------------------------------------#
    #                                                     #
    #  Choix 2 : Lecture d'un fichier png                 #
    #           Affichage du Flashcode 8x8                #
    #                                                     #
    #-----------------------------------------------------#
    elif Choix == '2':                            
        fichier = input("Entrez le nom du fichier image à lire (.png)? ")
        chemin  = input("Entrez le nom du répertoire ou est stocké l'image? ")
        NomComplet = chemin + fichier
        print("Nom du fichier à lire :",NomComplet)
        #
        if os.path.isfile(NomComplet):
            # print("Le fichier existe")
            im1 = Image.open(NomComplet)	# ouverture du fichier image
            fenetre = Tk()
            texte=Label(fenetre, text="Flash-code",fg='black',bg='cyan')
            texte.pack()
            fenetre.attributes('-fullscreen', 1)
            #
            # Définit les dimensions du canevas 
            zone_dessin = Canvas(fenetre, width=400, height=400,bg="white")
            zone_dessin.pack() #Affiche le canevas
            L,H = im1.size                  # L = largeur de l’image,
                                            # H = sa hauteur, en pixels
            # print(" L=",L,"H=",H)
            if L==8 and H==8:
                for y in range(H):	# on balaie toutes les lignes de l’image
                    #print (y)		
                    #
                    for x in range(H):
                        p = im1.getpixel((x,y))
                        # on calcule le niveau de gris (gris « moyenne » ici)
                        gris = (p[0]+p[1]+p[2])//3
                        #print(" valeur de gris",gris)
                        X = x*50
                        Y = y*50+25
                        if gris == 0:
                            zone_dessin.create_line(X,Y,X+50,Y,width=50,fill='black')
                #
                # fin de la boucle sur Y
                # affichage de la fenetre avec un bouton Quit pour quitter
                Button(fenetre, text="Quit", command=fenetre.destroy).pack()
                fenetre.mainloop()
            else:
                print("Erreur, le fichier png n'est pas de dimension 8x8\n")
        else:   # cas d'erreur de saisie sur le nom du fichier
            print("Le fichier n'existe pas")        
        #            
    #-----------------------------------------------------#
    #                                                     #
    #  Choix 3 : Lecture d'un fichier png (Flashcode)     #
    #            Decodage des caractères                  #
    #                                                     #
    #-----------------------------------------------------#
    elif Choix == '3':
        #
        fichier = input("Entrez le nom du fichier image à lire (.png)? ")
        chemin  = input("Entrez le nom du répertoire ou est stocké l'image? ")
        NomComplet = chemin + fichier
        print("Nom du fichier à lire :",NomComplet,"\n")
        #
        if os.path.isfile(NomComplet):
            # print("Le fichier existe")     
            im1 = Image.open(NomComplet)    # ouverture du fichier image
            L,H = im1.size                  # L = largeur de l’image,
                                            # H = sa hauteur, en pixels
            mot = ''                        # initialisation du mot
            for y in range(H):	  # on balaie toutes les lignes de l’image 
                codeASCII = 0     # on initialise le codeASCII de la lettre
                #print (y)		
                #
                for x in range(L): # pour chaque ligne,
                                   # on balaie toutes les colonnes (bit)
                    p = im1.getpixel((x,y)) 
                    # p[0] est la composante rouge
                    # p[1] la composante verte, et p[2] la composante bleue
                    # on calcule le niveau de gris (gris « moyenne » ici)
                    gris = (p[0]+p[1]+p[2])//3	
                    #   print(" valeur de gris",gris)
                    if gris == 255:   # si gris = 255 alors on a un blanc
                        # on ajouter la puissance de 2
                        codeASCII=codeASCII+puissance(2,7-x) 
                #
                #print("chiffre=",chiffre)
                #print(" en caractere=",chr(chiffre),'\n')
                # conversion du codeASCII en caractere , on l'ajoute au mot                
                mot = mot +chr(codeASCII) 
            #
            print("Le fichier contient les caractères :",mot,'\n')
        else: # le fichier n'existe pas
            print("Le fichier n'existe pas")
        #
    #-----------------------------------------------------#
    #                                                     #
    #  Choix 4 : Sortie de la boucle                      #
    #                                                     #
    #-----------------------------------------------------#
    elif Choix == '4':
        break; 
    else:   
        print("Valeur Invalide : Choix à faire parmi 1, 2, 3 ou 4")
 
    os.system("pause")
Dans la suite de l'exercice, il est demandé d'ajouter dans le programme l'affichage d'une boîte de dialogue à l'aide de Tkinter qui permette de choisir les différentes options : création/codage du flashcode, lecture du flashcode et décodage du flashcode.



Je n'ai malheureusement pas réussi à effectuer cette dernière requête. Quelqu'un pourrait-il m'aider ou me mettre sur la voie ? Merci d'avance