Python3.7 n'affiche pas une image .gif dans un canevas

GECEHE Messages postés 7 Date d'inscription mardi 18 mai 2021 Statut Membre Dernière intervention 28 décembre 2023 - 5 sept. 2023 à 18:47
mamiemando Messages postés 33120 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 21 mai 2024 - 12 sept. 2023 à 15:45

Bonjour,

J'ai un problème avec Python 3.7, il ne veut pas afficher une image .gif dans un canevas. Pourtant ce programme provient tout de même de l'université Lyon 1. Avec un de mes programmes personnels, il n'affiche que la couleur du fond.

SI vous pouviez m'éclairer ce serait sympa !

Sincères Salutations.


Linux / Chrome 78.0.3904.108

A voir également:

6 réponses

jee pee Messages postés 39763 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 22 mai 2024 9 196
6 sept. 2023 à 06:13

Bonjour,

Il faudrait tout de même pour que quelqu'un puisse te donner un avis que tu mettes le source concerné.

PS : utilise l'icone code <> pour la coloration syntaxique.


0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 6 sept. 2023 à 10:10

Bonjour,

Normalement si tu as écris ça, après la définition du Canvas:

im = PhotoImage(file='test.gif')

et ensuite 

mon_canevas.create_image(x,y, anchor = NW, image=im)

ça doit marcher ...

0
GECEHE Messages postés 7 Date d'inscription mardi 18 mai 2021 Statut Membre Dernière intervention 28 décembre 2023
Modifié le 12 sept. 2023 à 15:38

Bonjour.

Suite à mon message d'hier, voici plus d'informations.

Le code.

(Je n'arrive pas à faire apparaître les n° de ligne, ensuite, l'icone code <>, pas trouvée !)

##----- Importation des Modules -----##
from tkinter import *

##----- Création de la fenêtre -----##
fen = Tk()
fen.title('Tracer dans un canevas')

##----- Création des boutons -----##
bouton_quitter = Button(fen, text='Quitter', command=fen.destroy)
bouton_quitter.grid(row = 1, column = 1, padx = 3, pady = 3, sticky=E)

##----- Création du canevas -----##
dessin = Canvas(fen, width = 500, height = 400, bg = 'white')
dessin.grid(row = 0, column = 0, columnspan = 2, padx = 3, pady = 3)

##----- Dessiner dans le canevas -----##
ligne1 = dessin.create_line(250, 175, 250, 225, width=4, fill='#d05e82')
rect1 = dessin.create_rectangle(175, 250, 325, 327, width=2, outline='#d05e82')
ovale1 = dessin.create_oval(75, 25, 425, 375, width=2, outline='#fb8007')
ovale2 = dessin.create_oval(180, 140, 230, 190, width=0, fill='#d05e82')
ovale3 = dessin.create_oval(270, 140, 320, 190, width=0, fill='#d05e82')
dessin.create_text(254, 90, text='  Bienvenue\nà la formation', fill='#fb8007', font='Arial 20')
im = PhotoImage(file = 'Logo_ISN-IREM.gif', master=fen)
logo1 = dessin.create_image(250, 288, image = im )


##----- Programme principal -----##
fen.mainloop()                    # Boucle d'attente des événements

Pour appliquer l'exemple proposé, il faut télécharger le fichier Logo_ISN-IREM.gif, puis enregistrer ce fichier dans le répertoire courant.

Voici une copie du message d'erreur.

>>> %Run 'Formation ISN.py'
Traceback (most recent call last):
  File "/home/pi/Desktop/Stirling/Formation ISN.py", line 23, in <module>
    im = PhotoImage(file = 'Logo_ISN-IREM.gif', master=fen)
  File "/usr/lib/python3.7/tkinter/__init__.py", line 3545, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "/usr/lib/python3.7/tkinter/__init__.py", line 3501, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "Logo_ISN-IREM.gif"

Le "Logo_ISN-IREM.gif" doit s'afficher dans un rectangle prévu à cet effet sur le canevas.

Il faut aussi préciser que je travaille sur un Raspberry PI400.

Je viens d'utiliser ma tablette sur laquelle j'ai installé Pydroid 3, un Python pour Android, et tout fonctionne parfaitement !! Serait-ce un problème de matériel ?

J'espère que vous pourrez résoudre ce mystère.

Merci beaucoup, mes sincères salutations.

0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 6 sept. 2023 à 18:55

Bonjour

_tkinter.TclError: couldn't recognize data in image file "Logo_ISN-IREM.gif"

signifie : impossible de reconnaitre les données dans le fichier "Logo_ISN-IREM.gif"

Apparemment, le gif n'est pas reconnu ?

En tout cas, chez moi, sur mon PC Windows, il l'est

Pour insérer du code, c'est ici:

##----- Importation des Modules -----##
from tkinter import *

##----- Création de la fenêtre -----##
fen = Tk()
fen.title('Tracer dans un canevas')

##----- Création des boutons -----##
bouton_quitter = Button(fen, text='Quitter', command=fen.destroy)
bouton_quitter.grid(row = 1, column = 1, padx = 3, pady = 3, sticky=E)

##----- Création du canevas -----##
dessin = Canvas(fen, width = 500, height = 400, bg = 'white')
dessin.grid(row = 0, column = 0, columnspan = 2, padx = 3, pady = 3)

##----- Dessiner dans le canevas -----##
ligne1 = dessin.create_line(250, 175, 250, 225, width=4, fill='#d05e82')
rect1 = dessin.create_rectangle(175, 250, 325, 327, width=2, outline='#d05e82')
ovale1 = dessin.create_oval(75, 25, 425, 375, width=2, outline='#fb8007')
ovale2 = dessin.create_oval(180, 140, 230, 190, width=0, fill='#d05e82')
ovale3 = dessin.create_oval(270, 140, 320, 190, width=0, fill='#d05e82')
dessin.create_text(254, 90, text='  Bienvenue\nà la formation', fill='#fb8007', font='Arial 20')
im = PhotoImage(file = 'Logo_ISN-IREM.gif', master=fen)
logo1 = dessin.create_image(250, 288, image = im )


##----- Programme principal -----##
fen.mainloop()                    # Boucle d'attente des événements
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
GECEHE Messages postés 7 Date d'inscription mardi 18 mai 2021 Statut Membre Dernière intervention 28 décembre 2023
Modifié le 12 sept. 2023 à 15:40

Bonjour.

Suite à mon message du 5 septembre 2023, voici plus d'informations.

Le code

##----- Importation des Modules -----##
from tkinter import *

##----- Création de la fenêtre -----##
fen = Tk()
fen.title('Tracer dans un canevas')

##----- Création des boutons -----##
bouton_quitter = Button(fen, text='Quitter', command=fen.destroy)
bouton_quitter.grid(row = 1, column = 1, padx = 3, pady = 3, sticky=E)

##----- Création du canevas -----##
dessin = Canvas(fen, width = 500, height = 400, bg = 'white')
dessin.grid(row = 0, column = 0, columnspan = 2, padx = 3, pady = 3)

##----- Dessiner dans le canevas -----##
ligne1 = dessin.create_line(250, 175, 250, 225, width=4, fill='#d05e82')
rect1 = dessin.create_rectangle(175, 250, 325, 327, width=2, outline='#d05e82')
ovale1 = dessin.create_oval(75, 25, 425, 375, width=2, outline='#fb8007')
ovale2 = dessin.create_oval(180, 140, 230, 190, width=0, fill='#d05e82')
ovale3 = dessin.create_oval(270, 140, 320, 190, width=0, fill='#d05e82')
dessin.create_text(254, 90, text='  Bienvenue\nà la formation', fill='#fb8007', font='Arial 20')
im = PhotoImage(file = 'Logo_ISN-IREM.gif', master=fen)
logo1 = dessin.create_image(250, 288, image = im )


##----- Programme principal -----##
fen.mainloop()                    # Boucle d'attente des événements

Pour appliquer l'exemple proposé, il faut télécharger le fichier Logo_ISN-IREM.gif, puis enregistrer ce fichier dans le répertoire courant.

Voici une copie du message d'erreur

Python 3.7.3 (/usr/bin/python3)
>>> %Run 'Formation ISN.py'
Traceback (most recent call last):
  File "/home/pi/Desktop/Stirling/Formation ISN.py", line 23, in <module>
    im = PhotoImage(file = 'Logo_ISN-IREM.gif', master=fen)
  File "/usr/lib/python3.7/tkinter/__init__.py", line 3545, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "/usr/lib/python3.7/tkinter/__init__.py", line 3501, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "Logo_ISN-IREM.gif"
>>> 

Le "Logo_ISN-IREM.gif" doit s'afficher dans un rectangle prévu à cet effet sur le canavas. Ici le fichier .gif n’est pas reconnu, c’est très curieux !

Autres précisions

Je travaille sur un Raspberry PI400.

Je viens d'utiliser ma tablette sur laquelle j'ai installé Pydroid 3, un Python pour Android, et tout fonctionne parfaitement !!

Serait-ce un problème de matériel ? Je le crains.

J'espère que vous pourrez résoudre ce mystère.

Merci beaucoup, mes sincères salutations.

0
mamiemando Messages postés 33120 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 21 mai 2024 7 753
12 sept. 2023 à 15:45

Bonjour,

Vu que ta version de python est vieille, il en va sans doute de même pour ta version de tkinter et de ses dépendances, ce qui pourrait expliquer ton problème. Cette discussion suggère deux manières de contourner le problème :

  • Soit convertir le fichier dans un autre format (e.g., png), quitte à passer par PIL ou Pillow (un fork de PIL) pour faire la conversion à l'intérieur du programme
  • Soit mettre à jour python et tes modules python pour que ça marche correctement.

En tout cas, ce n'est pas un problème matériel.

Bonne chance

0