Affichage image .GIF dans fenêtre
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 :
Code:
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() |
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:
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() |
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.
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.