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

Python Discussion :

image : tkinter


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut image : tkinter
    Bonjour,

    j'essaye d'afficher une image , or celle ci ne s'affiche pas , à moins de taper l'instruction mainloop juste après or 2 mainloop sur une meme fenetre



    une idée du problème ?

  2. #2
    Membre Expert 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
    Par défaut
    Bonsoir,

    Citation Envoyé par fanween Voir le message
    une idée du problème ?
    Oui.
    Qu'utilisez vous pour lancer votre code ?

    @+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    bah j'ai un canvas , et j'utilise create_image comme methode , avec un canvas.pack() à la fin

  4. #4
    Membre Expert 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
    Par défaut
    Bonsoir,

    Ce n'est pas la question.
    Citation Envoyé par PauseKawa Voir le message
    Qu'utilisez vous pour lancer votre code ?
    IDLE, ligne de commande, etc..
    Certains "interfaces" utilisent Tkinter ou un "proxy" pour l'affichage ce qui fait que l' "image" a pour 'root' celui de l'interface en question ou que sa "référence" est perdue en route... L'image ne s'affiche donc pas dans le "child".

    à moins de taper l'instruction mainloop juste après or 2 mainloop sur une meme fenetre
    C'est dans la même idée : "Perte de référence".
    Vous pouvez faire une recherche sur le sous forum Tkinter, c'est un sujet de base : "Perte de référence"

    Donnez du code et comment vous le lancez pour voir.

    @+

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    comment lancer ?
    eclipse grace a un plugin

    le code :

    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
    class jeu_graph():
     
        def __init__( self ):
            #....
            self.f = Tk()
            self.c = Canvas( self.f , width=400 , height=400 )
            self.menu()
     
    def menu(self):
            # ......
            self.c.pack()
            self.f.bind( "<KeyRelease>" , self.keyrelease )
            self.f.bind('<Return>', self.onEnterKey)
            self.f.mainloop()
     
    def onEnterKey( self , event ):
           #...
           self.affichage_graphiquement()
     
    def affichage_graphiquement( self ) :
          #...
          self.c.delete(ALL)
          joueur_image = PhotoImage(file="images/j.gif")
          self.c.create_image( x +75 , y +45 , image=joueur_image )
         self.c.pack()
         self.f.mainloop() # si je met ca ca marche mais 2 mainloop...
    je pense avoir mis le code concernant le problème .

    merci

  6. #6
    Membre Expert 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
    Par défaut
    Bonjour,

    C'est donc cela.
    Testez ceci :
    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
    class jeu_graph:
        def __init__(self):
            #....
            self.f = Tk()
            self.c = Canvas(self.f, width=400, height=400)
            self.c.pack()
            # self.f.bind("<KeyRelease>", self.keyrelease)
            self.f.bind('<Return>', self.onEnterKey)
            self.f.mainloop()
     
        def onEnterKey( self , event ):
            #...
            x, y = 0, 0
            self.c.delete(ALL)
            self.joueur_image = PhotoImage(file="images/j.gif")  # self...
            self.c.create_image(x+75, y+45, image=self.joueur_image)
     
     
    j = jeu_graph()
    Ici self.joueur_image n'est là que pour rendre 'visible'/identifier l'image PhotoImage pour le Garbage collector.
    Quelques élucubrations sur le sujet ici.

    @+

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    en effet ça marche .

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    un autre problème dans le meme genre :

    je veux faire une animation , par exemple je bouge mon image de 10 pixel toutes les secondes .

    lorsque je fais ma boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for k in range( 0 , 60 ):
        self.x += 10
        self.affiche()
        time.sleep(1)
    le programme tourne , si je met un print à l'interieur de la boucle , ca affiche bien le message toutes les secondes or pour ce qui est graphique ca bug et meme que si je clique sur la fenetre le programme ne repond plus .

  9. #9
    Membre Expert 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
    Par défaut
    Bonjour,

    L'instruction time.sleep(1) est bloquante, utilisez plutôt le .after(ms, callbak) de Tkinter.
    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
    def changelabel():
        global id
        global c
        l.config(text=c)
        c += 1
        if c < 61:
            id = root.after(1000, changelabel)
     
     
    def onquit():
        root.after_cancel(id)
        root.destroy()
     
     
    c = 0
    root = Tk()
    l = Label(root)
    l.pack()
    Entry(root).pack()
    Button(root, text='Exit', command=onquit).pack()
    id = root.after(1, changelabel)
    root.mainloop()
    Vous trouverez un exemple avec un Canvas ici par exemple, et bien d'autres sur le forum mais pas le temps de faire une recherche ce matin

    @+

    Edit : J'en profite pour remonter un code sur le sujet. Regardez poller_routine().

Discussions similaires

  1. [Python 3.X] Scrolling d'une image [Tkinter]
    Par xbp28 dans le forum Tkinter
    Réponses: 1
    Dernier message: 13/02/2015, 01h19
  2. Problème insertion image (Tkinter)
    Par rafleterre dans le forum Tkinter
    Réponses: 4
    Dernier message: 12/05/2014, 13h46
  3. Problème affichage image Tkinter
    Par passant dans le forum Tkinter
    Réponses: 5
    Dernier message: 14/10/2010, 21h37
  4. Réponses: 4
    Dernier message: 16/12/2005, 22h52
  5. [Tkinter] Afficher une image autre que gif
    Par mcdonald dans le forum Tkinter
    Réponses: 1
    Dernier message: 26/11/2005, 19h41

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