Incrementation de nom de varibles

Yanss49 - Modifié le 9 juin 2023 à 09:51
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 - 10 juin 2023 à 10:58

Bonjour, je suis en train de réaliser un programme python avec tkinter.

ma question est:

je veux faire bouger aléatoirement des canvas, il y en a 20 canvas nommer de Post_it1 à Post_it20.

voici un parti de mon code :

  def Melange(self, i = 0):        
        if i < 20:
            self.posX = random.randint(20, 440)
            self.posY = random.randint(20, 440)
            self.canvas.coords(self.Post_it1, self.posX, self.posY, self.posX + 40, self.posY + 40)
            self.posX = random.randint(20, 440)
            self.posY = random.randint(20, 440)
            self.canvas.coords(self.Post_it2, self.posX, self.posY, self.posX + 40, self.posY + 40)
            .
            .
            .
            .
            .
            .
            .
            self.posX = random.randint(20, 440)
            self.posY = random.randint(20, 440)
            self.canvas.coords(self.Post_it20, self.posX, self.posY, self.posX + 40, self.posY + 40)
            root.after(400, self.Melange, i + 1)

je cherche activement comment réduire ce code par :

  def Melange(self, i = 0):        
        if i < 20:
            self.posX = random.randint(20, 440)
            self.posY = random.randint(20, 440)
            self.canvas.coords(self.Post_it(i), self.posX, self.posY, self.posX + 40, self.posY + 40)
            root.after(400, self.Melange, i + 1)

Merci d'avance.

3 réponses

Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
9 juin 2023 à 13:23

Bonjour 

tu mets tes canvas dans une liste et tu itères la liste.


0

Merci pour ta réponse.

je sais réaliser la liste (déjà essayé), mais je ne sais pas comment l'utiliser dans ce cas

voici un exemple qui ne fonctionne pas

    def Melange(self, i = 0): 
        self.Liste = []
        for l in range(1, 21):
            self.Liste.append(f"self.Post_it[{l}]")
        if i < 20:
            self.posX = random.randint(20, 440)
            self.posY = random.randint(20, 440)
            self.canvas.coords(self.Liste[i], self.posX, self.posY, self.posX + 40, self.posY + 40)
            root.after(400, self.Melange, i + 1)

Merci d'avance.

0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
10 juin 2023 à 10:58

Dans le constructeur de ton objet, tu initialises la liste comme attribut et tu la remplis à la main.

un truc genre

self.mesCanvas = []
self.mesCanvas.append(PostIt1)
self.mesCanvas.append(PostIt2)
#etc


 

Puis dans la fonction Mélange, tu utilises la liste.

Un truc du genre

        for i in range(20):
            monPostit = self.mesCanvas{i]
            monPostit.truc = machin


 


0
Rejoignez-nous