IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Tkinter : afficher une image dans un canvas


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    terminale S
    Inscrit en
    Juillet 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : terminale S

    Informations forums :
    Inscription : Juillet 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut 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 : 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
     
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Deux choses à vérifier dans ces cas là:

    - Mets le chemin entier de l'image.
    - Essayes avec une .jpg (mon petit doigt me dit que le problème est là)

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut indentation?
    Salut.
    Je pense que c'est un problème d'indentation.
    Supprime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def main():
        pass
     
     
    if __name__ == '__main__':
     
     
        from Tkinter import *
    pour charger Tkinter de la même façon que dans le premier fichier.

  4. #4
    Membre à l'essai
    Homme Profil pro
    terminale S
    Inscrit en
    Juillet 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : terminale S

    Informations forums :
    Inscription : Juillet 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Merci de ces réponses mais aucunes des deux solutions proposées ne fonctionnent.
    J'obtiens toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Et une image .jpg ne peut être utilisé par la bibliothèque standard Tkinter. Dans le cours il est conseillé d'utiliser une image .gif

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Citation Envoyé par __dardanos__ Voir le message
    Je pense que c'est un problème d'indentation.
    Supprime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def main():
        pass
     
     
    if __name__ == '__main__':
     
     
        from Tkinter import *
    Sans aucun doute !
    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 :
    Sûrement pas le même code que voilà ! Il viens d’où votre if __name__ == '__main__': (et autre def main() ?
    Ne mélangez pas tout.
    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
    from Tkinter import *
     
    fen1 = Tk()
     
    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)
     
    can1 = Canvas(fen1, width=160, height=160, bg='white')
    photo = PhotoImage(file='diable.gif')
    item = can1.create_image(80, 80, image=photo)
     
    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)
    fen1.mainloop()
    @+
    Merci d'utiliser le forum pour les questions techniques.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/03/2016, 20h22
  2. Réponses: 3
    Dernier message: 10/03/2012, 08h27
  3. Afficher une image dans un canvas
    Par laurentze dans le forum Débuter
    Réponses: 5
    Dernier message: 21/01/2010, 10h02
  4. afficher une image dans un canvas
    Par alex.blais dans le forum Tkinter
    Réponses: 4
    Dernier message: 08/12/2007, 18h29
  5. afficher une image dans un canvas
    Par Arrakis dans le forum Tkinter
    Réponses: 1
    Dernier message: 05/03/2007, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo