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 :

image dans canvas ne s'affiche pas


Sujet :

Tkinter Python

  1. #1
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 297
    Points
    297
    Par défaut image dans canvas ne s'affiche pas
    Le script ci-dessous n'affiche pas l'image matt1.gif dans le canevas.
    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 *
     
    class UiTk(Tk):
        def __init__(self,parent=None):
            Tk.__init__(self,parent)
            self.parent = parent
            self.__canv = Canvas(self,height=300,width=1000,bg="white")
            img1 = PhotoImage(file="matt1.gif")
            matt = self.__canv.create_image(0,0,image=img1,anchor='nw')
            self.__canv.pack()
     
     
    if __name__ == '__main__':
        app = UiTk()
        app.title("Exemple")
        app.mainloop()
    Cela ne se produit que dans une classe dérivée de Tk(), jamais en utilisant directement Tk().
    Je me creuse les méninges depuis quelques jours, en vain.
    Quelqu'un pourrait-il éclairer ma lanterne ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Salut,
    Il faut garder une reference sur l'image.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           img1 = self._img1 = PhotoImage(file="matt1.gif")
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 297
    Points
    297
    Par défaut
    Merci wiztricks,
    et chapeau pour la réactivité.

    Je suppose qu'il faudra que je creuse encore pas mal pour "penser en Python", moi qui croyais qu'une variable locale suffisait pour "passer" l'image au canevas à l'intérieur de la fonction.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par erca57 Voir le message
    Je suppose qu'il faudra que je creuse encore pas mal pour "penser en Python", moi qui croyais qu'une variable locale suffisait pour "passer" l'image au canevas à l'intérieur de la fonction.
    Garder une référence sur l'image pour éviter qu'elle ne disparaisse est une joyeuseté tkinter.
    Rien a voir avec Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Garder une référence sur l'image pour éviter qu'elle ne disparaisse est une joyeuseté tkinter.
    Rien a voir avec Python.

    - W
    wiztricks a raison: la librairie tkinter sert en réalité d'interface à une autre librairie: Tcl/Tk écrite dans le langage Tcl (Tool Command-Line) qui gère sa mémoire différemment.

    Si le ramasse-miettes (Garbage Collector ou GC) de Python ne détruit jamais un objet pour qui il reste au moins une référence quelque part, il n'en va pas de même avec le GC de Tcl/Tk qui visiblement est nettement moins sophistiqué.

    C'est effectivement une joyeuseté de chez Tkinter, de chez Tk (Toolkit) et de chez Tcl (Tool Command-Line).

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    wiztricks a raison: la librairie tkinter sert en réalité d'interface à une autre librairie: Tcl/Tk écrite dans le langage Tcl (Tool Command-Line) qui gère sa mémoire différemment.

    Si le ramasse-miettes (Garbage Collector ou GC) de Python ne détruit jamais un objet pour qui il reste au moins une référence quelque part, il n'en va pas de même avec le GC de Tcl/Tk qui visiblement est nettement moins sophistiqué.

    C'est effectivement une joyeuseté de chez Tkinter, de chez Tk (Toolkit) et de chez Tcl (Tool Command-Line).
    Au temps pour moi, je dis des conneries : c'est dans le code de Tkinter qu'il n'y a pas de persistance des données.

    Tcl/Tk n'est pas en cause. Mea culpa.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    Au temps pour moi, je dis des conneries : c'est dans le code de Tkinter qu'il n'y a pas de persistance des données.
    La classe Image de tkinter va devoir créer une variable Tk pour garder une référence (cote Tk) sur l'image.
    tkinter est "proxy" Python.
    Créer des objets Tk c'est facile mais si on ne les détruit jamais, on aura un problème de memory leak dans Tk.
    Détruire l'objet Tk lorsqu'on dereference le proxy Python fait sens.
    D’où la méthode __del__ qui fait le boulot cote Python.

    Mais bon pas besoin d’être aussi précis... la recette de cuisine "garder une référence a..." est plus simple a assimiler.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    La classe Image de tkinter va devoir créer une variable Tk pour garder une référence (cote Tk) sur l'image.
    tkinter est "proxy" Python.
    Créer des objets Tk c'est facile mais si on ne les détruit jamais, on aura un problème de memory leak dans Tk.
    Détruire l'objet Tk lorsqu'on dereference le proxy Python fait sens.
    D’où la méthode __del__ qui fait le boulot cote Python.

    Mais bon pas besoin d’être aussi précis... la recette de cuisine "garder une référence a..." est plus simple a assimiler.
    - W
    Oui, restons simples.

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

Discussions similaires

  1. Image de fond ne s'affiche pas dans le menu
    Par sebasti1-88 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 31/08/2011, 17h44
  2. image en background ne s'affiche pas
    Par j_esti dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 21/09/2008, 15h34
  3. Image de bouton qui s'affiche pas
    Par LaDeveloppeuse dans le forum Visual Studio
    Réponses: 0
    Dernier message: 30/07/2008, 21h15
  4. Problème chargement d'une image dans canvas
    Par Hujii dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 28/04/2008, 21h33
  5. Réponses: 10
    Dernier message: 26/02/2008, 15h28

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