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 :

Un .configure() qui ne marche pas avec l'argument 'image'


Sujet :

Tkinter Python

  1. #1
    Membre habitué
    Avatar de moithibault
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 142
    Points
    142
    Par défaut Un .configure() qui ne marche pas avec l'argument 'image'
    Bonjour ,

    Je suis entrain de programmer un mini jeu (style Othello) Qui inclus notamment un éditeur de terrain . Le problème se situe au niveau des boutons de commandes , le voici :


    J'ai 4 types de cases différentes , chacune sont représentées par un chiffre (0,1,2,3) et caractérisées dans l'interface par une image .
    J'affiche les images qui doivent avoir la particularités d'être cliquables , pour cela j'ai créee une petite classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class BoutonImg(Button):
            def __init__(self,master,imag,action=None,color="white"):
                    Button.__init__(self,master,bd=0,command=action) 
                    self.img=ImageTk.PhotoImage(Image.open(imag)) 
                    self.configure(image=self.img,bg=color)
    Ensuite je souhaite afficher l'image qui viens d'être cliquée (l'image sélectionnée en bref) . Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #Ici ce sont les boutons qui permettent de faire les actions sur les terrains
            BoutonImg(self.sidebar,THEME+'/green.png',lambda:self.setvar(2,THEME+'/green.png')).grid(row=0,column=0)
            BoutonImg(self.sidebar,THEME+'/red.png',lambda:self.setvar(3,THEME+'/red.png')).grid(row=1,column=0)
            BoutonImg(self.sidebar,THEME+'/none.png',lambda:self.setvar(0,THEME+'/none.png')).grid(row=2,column=0)
            BoutonImg(self.sidebar,THEME+'/black.png',lambda:self.setvar(1,THEME+'/black.png')).grid(row=3,column=0)
            Label(self.sidebar,text="Case sélectionée: ",bg="#F7F555").grid(row=4,sticky=W)
            self.current=BoutonImg(self.sidebar,THEME+'/black.png',lambda:self.setvar(1))
            self.current.grid(row=5,column=0)
            BoutonImg(self.sidebar,THEME+'/valider.png',self.validerTerrain).grid(row=6,column=0,sticky=S)

    et donc pour mettre à jour la case sélectionnée à la fait de ma méthode setvar() j'appel la methode update() que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def update(self,chemin):
            '''permet de mettre à jour la case sélectionnée'''
     
      self.current.configure(image=ImageTk.PhotoImage(Image.open(chemin))
    Et enfin voici le PROBLEME : Tout fonctionne mis à part lorsque que je clique sur une case la case sélectionné disparait et n'affiche aucune autre image , et le plus bizzard (c'est ce qui m'inquiéte , si je rajoute dans update() et dans le configure ', bg="red"' (par exemple) Alors lorsque je clique sur une case la case sélectionné devient bien toute rouge ! J'aimerais savoir comment résoudre ce problème sachant que le chemin est bon et le code précédent marche .... Merci [PS1 : la case sélectionnée n'a pas besoin d'être un bouton (c'est juste une affichette pour l'utilisateur) Du coup j'ai aussi essayé de définir self.current comme une image et pas un bouton-image: le résultat est le même ]
    [PS2: Si ça peut aider , j'ai testé voir d'où ça venez et en remplacent chemin dans self.current .configure(.......chemin...) Ca ne m'affiche problématiquement pas l'image mais lorsque je met un fond (bg=...) Ca prend bien la taille en pixel de l'image à ouvrir ... L'image est bien mise à jour mais ne s'affiche pas ]

  2. #2
    Membre habitué
    Avatar de moithibault
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 142
    Points
    142
    Par défaut
    J'ai résolue mon probléme ,
    En cherchant j'ai trouvé ce topic :

    http://www.developpez.net/forums/d91...age-disparait/

    et donc de mon côté ma fonction update donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
          self.dic={}
     
        def update(self,chemin):
            '''permet de mettre à jour la case sélectionnée'''
            print "///chemin: ",chemin
            photo=ImageTk.PhotoImage(Image.open(chemin))
            self.dic['photo']=photo
            self.current.configure(image=self.dic['photo'])
    et ..... ça marche

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

Discussions similaires

  1. Upload qui ne marche pas avec mon hébergeur
    Par kamalalex dans le forum Langage
    Réponses: 6
    Dernier message: 23/02/2012, 16h13
  2. Réponses: 1
    Dernier message: 27/11/2010, 15h43
  3. [PHP 5.3] Fonction str_replace qui ne marche pas avec '<br/>' ?
    Par [ZiP] dans le forum Langage
    Réponses: 1
    Dernier message: 28/02/2010, 18h27
  4. condition qui ne marche pas avec un string
    Par descurai dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/04/2009, 16h31
  5. Iptables configuration qui ne marche pas....
    Par The_Nail dans le forum Sécurité
    Réponses: 7
    Dernier message: 03/02/2004, 14h27

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