Salut, j'ai un souci avec l'affichage d'une image au format GIF dans une fenêtre en TKinter.
Avec mon premier script cela marche très bien :
Mais si je modifie mon code Python pour utiliser une classe et des méthodes, cela ne marche plus, j'ai le cadre du canvas qui s'affiche mais la photo n'est pas visible.
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 from Tkinter import * from PIL import Image, ImageTk fen1 = Tk() fen1.title=("Mon Programme") image = Image.open("image/mypicture.gif") photo = ImageTk.PhotoImage(image) button1 = Button(fen1, text = 'Annuler', command = fen1.destroy) button2 = Button(fen1, text = 'Continuer') txt1 = Label(fen1, text='Bienvenue...') txt2 = Label(fen1, text='bla bla bla bla') can1 = Canvas(fen1, width = image.size[0], height = image.size[1]) can1.create_image(0,0, anchor = NW, image=photo) txt1.grid(row =0, columnspan =2) txt2.grid(row =1, columnspan =2) button1.grid(row =2, column =0) button2.grid(row =2, column =1) can1.grid(row =0, column =2, rowspan =3) fen1.mainloop()
La différence par rapport à mon premier code, c'est que lorsqu'on clique sur le bouton "Continuer", la frame est supprimée et remplacer par une autre frame contenant de nouveaux widgets. C'est la technique qui m'est venue à l'esprit pour créer une fenêtre affichant plusieurs écrans l'un après l'autre.
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 class Application: def __init__(self): """Constructeur de la fenêtre principale""" self.root = Tk() self.root.title('Mon Application') self.root.geometry("640x280+300+0") # Taille et position de la fenêtre self.createFrame() self.ecranAccueil() def createFrame(self): self.frame = Frame(self.root) self.frame.pack() def deleteFrame(self): self.frame.destroy() def ecranAccueil(self): """Affichage de l'écran d'accueil""" image = Image.open("image/mypicture.gif") photo = ImageTk.PhotoImage(image) button1 = Button(self.frame, text = 'Annuler', command = self.root.destroy) button2 = Button(self.frame, text = 'Continuer', command = self.ecranSaisie) txt1 = Label(self.frame, text='Bienvenue...') txt2 = Label(self.frame, text='Bla Bla Bla') can1 = Canvas(self.frame, width = image.size[0], height = image.size[1]) can1.create_image(0,0, anchor = NW, image=photo) txt1.grid(row =0, columnspan =2) txt2.grid(row =1, columnspan =2) button1.grid(row =2, column =0) button2.grid(row =2, column =1) can1.grid(row =0, column =2, rowspan =3) def ecranSaisie(self): """Affichage de l'écran de saisie des coordonnees de l'utilisateur""" self.deleteFrame() self.createFrame() txt3 = Label(self.frame, text='Page2...blablabla') txt3.grid(row =0) # Programme principal from Tkinter import * from PIL import Image, ImageTk f = Application() f.root.mainloop()
Voilà, je n'arrive pas à comprendre pourquoi l'image ne s'affiche plus d'une version du code à l'autre. Je suis nouveau codeur en Python, j'ai plus l'habitude de Java ou du C.
Partager