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] "Portée" de PhotoImage ? [Fait]


Sujet :

Tkinter Python

  1. #1
    Membre habitué
    Avatar de Olivier_
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut [Tkinter] "Portée" de PhotoImage ?
    Salut à tous,

    je ne sais pas si mon titre de sujet est très explicite, je ne sais pas trop comment exprimer le problème que je rencontre.
    Je m'explique :

    J'ai une class Carte qui me gère la création d'objets Carte (à jouer, mais à la limite, on s'en fout). J'ai une classe App qui gère mon "application" qui à terme ne s'occupera que du fenêtrage et de l'interaction avec le joueur, mais qui pour l'instant pour mes essais me sert de "jeu".

    Je crée donc une instance de Carte pour tester, ça roule impecable. Je suis content, je passe donc à la phase suivant, mettre une image.

    (je suis sous Tkinter)
    donc, hop, pic = PhotoImage(file='blabla.gif')
    can.create_image(coord, pic)

    Et là, patatra, ça marche pas.

    Je vois bien ce qui cloche, mais je ne comprend pas pourquoi, et j'aurais voulu avoir la "technique" pour réaliser ce que je veux.

    En gros, j'ai fen, une instance de Tk(), can, un canvas de fen dans App, je passe can en paramètre de ma class Carte et je traite la création de l'image dans ma class Carte et là, ça ne fait pas l'image alors qu'un create_line fonctionne par exemple, donc le problème vient bien du PhotoImage.
    Je teste la création d'une image directement dans App et là aucun soucis, ça fonctionne.
    Donc, je pense que le problème vient du fait que PhotoImage est appelée dans la class Carte, mais ça ne devrait pas poser de problème à mon sens étant donné que je passe can en paramètre de la class Carte...

    Donc, si vous aviez une explication et une solution, ça serait tip top !!

    Voici mon code dans les grandes lignes
    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
     
    from Tkinter import *
    class Carte:
        def __init__(self, carte, couleur, etat, canvas):
            pic = PhotoImage(file='bitmaps/retourne.gif')
     
            x = 20
            y = 20
            canvas.create_image((x,y), image=pic)
     
    class App:
        def __init__(self):
            fen = Tk()
            fen.title('Jeu de carte à la con')
            can = Canvas(fen)
            can.pack()
            RK = Carte('K', 'K', 1, can)
     
            #pic = PhotoImage(file='bitmaps/KK.gif')
            #can.create_image((20,20), image=pic)
     
            fen.mainloop()
     
    test = App()
    Voilà voilà , merci !

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 30
    Points : 29
    Points
    29
    Par défaut
    salut

    c'est certainement plus un problème de durée de vie que de portée. dans ton exemple on n'est pas sûr que pic est copié dans create_image, et comme pic est détruit à la fin de l'éxécution du constructeur, celà vient peut être de la. (mais je n'utilise pas tkinter je me trompe peut-être)

    personnelement je mettrais un self.pic au lieu d'un pic tout seul.

  3. #3
    Membre habitué
    Avatar de Olivier_
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut
    20/20 kalimero

    Merci ! C'est exactement le problème que tu soulevais !

    Je n'ai pas encore tout saisi à ce niveau là alors.
    Dans ma tête, le self ne servait qu'à "globaliser" une variable à l'intérieur d'une classe afin de pouvoir y accéder dans n'importe quel méthode. Je vois que ça fait un peu plus !

    Je peux poursuivre mes essais, merci

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

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