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 :

afficher une image dans un canvas


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut afficher une image dans un canvas
    Bonjour,
    Je commence tout juste avec Python, et je ne comprend pas pourquoi lorsque je clique sur afficher, image1.gif n'apparait pas dans le canvas:

    from Tkinter import *
    import Tix

    root = Tix.Tk()

    canvas=Canvas(root,width="500",height="400")
    canvas.pack()

    #********************************************************************************
    def afficher():
    p=PhotoImage(file="image.gif")
    canvas.create_image(0,0,anchor=NW,image=p)
    #********************************************************************************

    #bouton bAfficher:
    bAfficher = Button(root, text='Afficher image',command=afficher )
    bAfficher.pack()

    root.mainloop()


    Quelque chose qui m'echappe...

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Salut,

    La référence de ton image est stockée dans la variable p, mais celle-ci est locale à la fonction afficher, elle sera donc détruite dès que la fonction prendra fin.
    Une fois la fonction terminée, il n'existe plus aucun référence vers l'objet-image chargé en mémoire, donc le ramasse-miettes (ou "garbage collector") de Python se charge de libérer la mémoire et l'image n'est plus stockée nulle part : résultat, ton image s'affiche et disparaît aussitôt.

    La référence d'une image doit être conservée en mémoire tant que celle-ci est affichée à l'écran, voilà pourquoi tu dois charger l'image hors de la fonction.

    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
    from Tkinter import *
     
     
    #********************************************************************************
    def afficher():
    	canvas.create_image(0,0,anchor=NW,image=p)
    #********************************************************************************
     
    root = Tk()
    p=PhotoImage(file="image.gif")
    canvas=Canvas(root,width="500",height="400")
    canvas.pack()
    #bouton bAfficher:
    bAfficher = Button(root, text='Afficher image',command=afficher )
    bAfficher.pack()
     
    root.mainloop()
    Note : pourquoi utiliser Tix ?
    Généralement on utilise soit Tkinter, soit Tix, mais pas les deux à la fois. Certains widgets Tix ont le même nom que les widgets Tkinter, mais pas le même comportement, tu risques d'avoir de mauvaises surprises !
    <3 Debian
    [ C | C++ | PHP | Python ]

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Note : pourquoi utiliser Tix ?
    Généralement on utilise soit Tkinter, soit Tix, mais pas les deux à la fois. Certains widgets Tix ont le même nom que les widgets Tkinter, mais pas le même comportement, tu risques d'avoir de mauvaises surprises !
    Dans le code de alex.blais il n'y a pas d'ambiguité. il a importé toute la lib Tkinter, alors qu'il a juste importer Tix donc il doit obligatoirement spécifier quand il utilise un composant Tix.

    dans son cas

    a=Button est un Bouton Tkinter alors que s'il veut utiliser un bouton Tix il doit faire
    a=Tix.Button

    ++

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Citation Envoyé par mon_pierre
    Dans le code de alex.blais il n'y a pas d'ambiguité
    Certes, mais le problème n'est pas là, je parle juste d'un point de vue sémantique.

    Pourquoi importer le module Tix seulement pour utiliser la classe Tk, alors qu'elle est déjà présente dans Tkinter ? C'est inutile.
    Tix contient déjà tout le module Tkinter mais certains widgets ont été surchargés : c'est le cas de Frame, OptionMenu, Listbox... qui s'utilisent de manière différente.
    Il est donc important de ne pas confondre les deux et de n'utiliser Tix qu'en cas de réel besoin (et dans ce cas là, on ne va pas s'amuser non plus à ré-importer Tkinter).
    <3 Debian
    [ C | C++ | PHP | Python ]

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci,merci, en effet ça marche mieux maintenant...

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

Discussions similaires

  1. Tkinter : afficher une image dans un canvas
    Par nicolivier dans le forum Tkinter
    Réponses: 4
    Dernier message: 28/03/2013, 21h20
  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 état
    Par Invité1 dans le forum IHM
    Réponses: 8
    Dernier message: 23/09/2009, 14h59
  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