Bonjour,

Ca va faire depuis un petit moment que je suis bloqué à cause d'un bug que je n'arrive pas à résoudre. Le but est d'afficher des images.
J'ai commencé par créer un prototype et ça me donne le code suivant qui marche très bien :
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
 
#bibliothèques
import tkinter as tk
 
#création de la fenêtre principale
fen=tk.Tk()
 
#création du canvas selon les paramètres
can=tk.Canvas(fen,height=600,width=300)
 
#images
image1=tk.PhotoImage(master=fen,file='données\\textures\\chemin_droite1.ppm')
image2=tk.PhotoImage(master=fen,file='données\\textures\\chemin_hautgauche1.ppm')
 
#gestion du dictionnaire
dico={}
dico[1]=image1
dico[2]=image2
 
#matrice
matrice=[[1,2],
         [2,1]]
 
#taille de la matrice
nbLig=len(matrice)
nbCol=len(matrice[0])
 
#affichage sous-image par sous-image
for i in range(0,nbLig):
    for j in range(0,nbCol):
        can.create_image(i*48,j*48,image=dico[matrice[i][j]])
 
can.update()
can.grid()
 
fen.mainloop()
Je suis donc passé à l'étape suivante et j'ai voulu l'implémenter sur un code mais c'est là que ça coince. Aucune erreur ne se produit, mais l'image ne s'affiche plus.
J'ai essayé de réduire le code au maximum pour simplifier et j'obtiens le 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
 
import tkinter as tk
 
class FenetrePrincipale(tk.Tk):
    def __init__(self):
        super().__init__()
 
    def boucle(self):
        super().mainloop()
 
    def definition(self,titre):
        super().geometry("1400x700+67+40")
 
        self.update()
        self.caneva = CanvaFenetre(self, self.winfo_width(), self.winfo_height())
 
class CanvaFenetre(tk.Canvas):
    def __init__(self,fenetre,width,height,parent=None,posX=0,posY=0):
        super().__init__(fenetre,bg="white",width=width,height=height)
        super().place(x=posX,y=posY)
 
        ############################# PARTIE QUI FONCTIONNE ##############################
        #images
        image1=tk.PhotoImage(master=fenetre,file='données\\textures\\chemin_droite1.ppm')
        image2=tk.PhotoImage(master=fenetre,file='données\\textures\\chemin_hautgauche1.ppm')
 
        #gestion du dictionnaire
        dico={}
        dico[1]=image1
        dico[2]=image2
 
        #matrice
        matrice=[[1,2],
                 [2,1]]
 
        #taille de la matrice
        nbLig=len(matrice)
        nbCol=len(matrice[0])
 
        #affichage sous-image par sous-image
        for i in range(0,nbLig):
            for j in range(0,nbCol):
                self.create_image(i*48,j*48,image=dico[matrice[i][j]])
 
        self.update()
        self.grid() 
        ############################# PARTIE QUI FONCTIONNE ##############################
 
class Application:
    def __init__(self):
        self.fenetrePrincipale = FenetrePrincipale()
        self.fenetrePrincipale.definition("work")
        self.fenetrePrincipale.boucle()
 
Application()
A vue de nez (probablement pas le meilleur nez qui soit cela dit), je dirais que le code est équivalent, du coup je comprend vraiment pas le problème dans la deuxième version...

Merci d'avance pour la personne qui pourras m'aider