Tkinter : afficher une image dans un canvas
Bonsoir,
je suis actuellement en Terminale S et pour mon projet de fin d'année, je travaille sur Tkinter.
Je suis donc en train de suivre le cours d'apprentissage présent sur ce site : http://python.developpez.com/cours/T...age=page_10#L8
J'en suis au chapitre 8.5, à l'image d'oiseau :)
Donc je copie/colle le code suivant :
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
|
from Tkinter import *
fen1 = Tk()
# création de widgets 'Label' et 'Entry' :
txt1 = Label(fen1, text ='Premier champ :')
txt2 = Label(fen1, text ='Second :')
txt3 = Label(fen1, text ='Troisième :')
entr1 = Entry(fen1)
entr2 = Entry(fen1)
entr3 = Entry(fen1)
# création d'un widget 'Canvas' contenant une image bitmap :
can1 = Canvas(fen1, width =160, height =160, bg ='white')
photo = PhotoImage(file ='Martin_P.gif')
item = can1.create_image(80, 80, image =photo)
# Mise en page à l'aide de la méthode 'grid' :
txt1.grid(row =1, sticky =E)
txt2.grid(row =2, sticky =E)
txt3.grid(row =3, sticky =E)
entr1.grid(row =1, column =2)
entr2.grid(row =2, column =2)
entr3.grid(row =3, column =2)
can1.grid(row =1, column =3, rowspan =3, padx =10, pady =5)
# démarrage :
fen1.mainloop() |
Puis je remplace le nom d'image "Martin_P" par une image .gif qui se trouve dans le même répertoire que mon programme.
j’obtiens donc le code suivant :
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
| def main():
pass
if __name__ == '__main__':
from Tkinter import *
fen1 = Tk()
# cr?ation de widgets 'Label' et 'Entry' :
txt1 = Label(fen1, text ='Premier champ :')
txt2 = Label(fen1, text ='Second :')
txt3 = Label(fen1, text ='Troisi?me :')
entr1 = Entry(fen1)
entr2 = Entry(fen1)
entr3 = Entry(fen1)
# cr?ation d'un widget 'Canvas' contenant une image bitmap :
can1 = Canvas(fen1, width =160, height =160, bg ='white')
photo = PhotoImage(file ='diable.gif')
item = can1.create_image(80, 80, image =photo)
# Mise en page ? l'aide de la m?thode 'grid' :
txt1.grid(row =1, sticky =E)
txt2.grid(row =2, sticky =E)
txt3.grid(row =3, sticky =E)
entr1.grid(row =1, column =2)
entr2.grid(row =2, column =2)
entr3.grid(row =3, column =2)
can1.grid(row =1, column =3, rowspan =3, padx =10, pady =5)
# d?marrage :
fen1.mainloop()
main() |
Mais quand je le lance (pas trop loin bien sur) Pyscripter m'affiche :
Code:
1 2 3 4 5 6 7 8 9
| Traceback (most recent call last):
File "<string>", line 254, in run_nodebug
File "C:\python\[ISN]Projet bac\Insertion image.py", line 35, in <module>
item = can1.create_image(80, 80, image =photo)
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 2198, in create_image
return self._create('image', args, kw)
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 2189, in _create
*(args + self._options(cnf, kw))))
_tkinter.TclError: image "pyimage11" doesn't exist |
Je pense que le problème vient de mon image (c'est même sur ^^) mais je ne vois pas du tout où.
j'ai fouillé la fac et le forum mais je n'ai rien trouvé qui pourrait m'aider.
Merci d'avance.