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 :

Boucle sur canvas.create_image


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut Boucle sur canvas.create_image
    Bonjour.

    Poursuivant mon appli "Lancer de dés", je tâche de faire une boucle d'affichage des dés dans un canvas.
    Le but est d'afficher n dés de valeur choisie au hasard, alignés en diagonale sur l'écran. Voici la fonction qui réalise cette tâche (je fais d'abord un test avec n=3 dés à lancer) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def hasard(self):
            for i in range(3) :
                self.image=PhotoImage(file=self.faces[randrange(1,7,1)-1]) #choisit l'image du dé dans la liste des 6 faces)
                self.canvas.create_image(45*(i+1), 45*(i+1), image = self.image) #insère l'image dans le canvas
    L'ennui, c'est que je n'obtiens que le 3ème dé en bas à droite : il semblerait que l'image du dé n-1 disparaisse à l'apparition du dé n .

    Qu'en pensez-vous, svp ?
    Je joins l'intégralité de la classe pour que les bonnes âmes puissent joujouter avec...
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #_*_ coding: iso-8859-1 _*_
     
    from Tkinter import*
    from random import randrange
     
    class ApplicationDes(Tk) :
        #constructeur
        def __init__(self,parent):
            Tk.__init__(self,parent)
            self.parent=parent
            self.faces=['1.gif', '2.gif', '3.gif', '4.gif', '5.gif', '6.gif']
            self.initialize()
     
        #fonction qui modifie le texte de bouton en fonction de la valeur du curseur
        def affiche(self,valeur):
            self.bouton.config(text ="Lancez "+str(valeur)+" dés !")
     
        #fonction affiche 1 dé au hasard
        def hasard(self):
            for i in range(3) :
                self.image=PhotoImage(file=self.faces[randrange(1,7,1)-1])
                self.canvas.create_image(45*(i+1), 45*(i+1), image = self.image)
     
     
        #initialisation des widget
        def initialize(self) :
            self.grid()
            #le curseur pour le nombre de dés
            self.curseur=Scale(self, length=500, from_=1, to=20, orient=HORIZONTAL, label ='Nombre de dés à lancer',troughcolor ='dark grey',
                        sliderlength =20, tickinterval =1,command=self.affiche)
            self.curseur.grid(column=0,row=0,sticky='EW')
            #le bouton pour lancer les dés
            self.bouton=Button(self,text="Lancez les dés !",command=self.hasard)
            self.bouton.grid(column=0,row=1)
            #la fenêtre dans laquelle vont s'afficher les dés
            self.canvas=Canvas(self,width="200",height="200")
            self.canvas.grid(column=0,row=2)
            #auto redimensionnement de la fenêtre
            self.resizable(True,True)
     
     
    #création d'une application
    if __name__=="__main__":
        app = ApplicationDes(None)
        app.title("Les dés sont jetés !")
        app.mainloop()
    Merci d'avance !

    Gram'

  2. #2
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    et si tu rajoute : "anchor = Tk.NW" à ton create_image?

    En relisant ma phrase, je n'y crois déjà plus.
    Ton canevas fait plus de 145*145 donc supposer que toutes tes images se dessinent les unes sur les autres dans le coins inférieur droit, c'est pas très convaincant.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut
    Ben toujours rien

    Par contre, j'ai testé de mettre le choix de l'image avant la boucle, et ça marche : j'ai trois dés IDENTIQUES, donc, en diag :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def hasard(self):
            self.image=PhotoImage(file=self.faces[randrange(1,7,1)-1])
            for i in range(3) :
                self.canvas.create_image(45*(i+1), 45*(i+1), image = self.image)
    Ca n'a aucun intérêt, mais on se rapproche !
    Maintenant, ya plus qu'à faire le choix du dés à chaque tour de boucle... et là, je bloque !

    A+

    Gram'

  4. #4
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Alors déjà vu que tu utilise "image" localement, pas besoin de faire "self.image", "image" sufffirait.

    Sinon, euh...
    je cherche ;-)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut
    Ah, moi, quand je vire self de self.image, il me met image undefined, ... donc je laisse

    Merci de te creuser : je me sens moins seul !

    A+

    Gram'

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut
    Ayest, j'ai trouvé !
    Comme la boucle ne foncitonne pas, faisons-la à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        def hasard(self):
                self.image=PhotoImage(file=self.faces[randrange(1,7,1)-1])
                self.canvas.create_image(45, 45, image = self.image)
                self.image=PhotoImage(file=self.faces[randrange(1,7,1)-1])
                self.canvas.create_image(90, 90, image = self.image)
    Ca ne fonctionne pas : toujours un seul dé...

    Petite idée (de génie ?) : peut-être qu'il n'aime pas que ce soit deux fois self.image, et qu'il faut changer le nom du contenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        def hasard(self):
                self.image=PhotoImage(file=self.faces[randrange(1,7,1)-1])
                self.canvas.create_image(45, 45, image = self.image)
                self.autre_image=PhotoImage(file=self.faces[randrange(1,7,1)-1])
                self.canvas.create_image(90, 90, image = self.autre_image)
    Ca maaaaarche !

    Ya pu qu'à prendre ça en compte : mais là, je cale à essayer de modifier le nom de la variable self.image à chaque tour...

    Any idea ?

    Gram'

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

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. Macro sur Excel/Boucle sur les lettres
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2005, 11h56
  3. [JDBC]Boucle sur tous les éléments du ResultSet
    Par Terminator dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2005, 19h30
  4. L'installation d'XP boucle sur elle-même
    Par pf106 dans le forum Windows XP
    Réponses: 13
    Dernier message: 20/08/2005, 14h55
  5. [MFC] Boucle sur un bouton
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h37

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