Tkinter Méthode Delete - Problème avec POO
Fermé
Laxfiskar
-
2 sept. 2020 à 14:45
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 6 sept. 2020 à 09:05
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 6 sept. 2020 à 09:05
A voir également:
- Tkinter Méthode Delete - Problème avec POO
- Hiberfil.sys delete - Guide
- Juste delete me - Guide
- Méthode des tangentes excel ✓ - Forum Excel
- Super poo - Forum Programmation
- Le client et le serveur ne sont pas compatibles avec une version de protocole ou une méthode de chiffrement ssl commune. ✓ - Forum Réseaux sociaux
6 réponses
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 2 sept. 2020 à 18:30
Modifié le 2 sept. 2020 à 18:30
Bonsoir Laxfiskar,
Oui, n'efface pas l'objet pour le redessiner, mais met plutôt à jour ses coordonnées
Exemple avec increase:
Il y a déjà moins de lignes de code :-)
Oui, n'efface pas l'objet pour le redessiner, mais met plutôt à jour ses coordonnées
Exemple avec increase:
.......... self.oval = self.can.create_oval(x-r,y-r,x+r,y+r,fill=self.fill, outline=self.outline) def increase(self,event): "Méthode pour faire grossir la balle avec un appui de touche" self.r +=10 # La méthode incrémente le rayon self.can.coords(self.oval, self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r) ...................
Il y a déjà moins de lignes de code :-)
Super ça fonctionne!
Si je comprends bien, mon erreur était de ne pas avoir stocké la création du cercle dans une variable. Et donc, impossible d'y faire référence par la suite avec la méthode delete ou coords.
Merci beaucoup pour ton éclairage!
Si je comprends bien, mon erreur était de ne pas avoir stocké la création du cercle dans une variable. Et donc, impossible d'y faire référence par la suite avec la méthode delete ou coords.
Merci beaucoup pour ton éclairage!
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
2 sept. 2020 à 20:44
2 sept. 2020 à 20:44
C'est parfois utile de donner un nom aux objets que l'on créé
A noter que la méthode coords fonctionne avec toute sorte d'objets ...
Ca aussi peut servir à déplacer la balle, par exemple
A noter que la méthode coords fonctionne avec toute sorte d'objets ...
Ca aussi peut servir à déplacer la balle, par exemple
Merci beaucoup!
J'en profite, car j'ai une deuxième question sur un sujet un peu similaire, mais qui concerne cette fois la méthode AFTER avec Tkinter.
J'essaie tout simplement l'exercice d'animation automatique d'une balle, que je comprends bien en version procédurale, mais ici je coince un peu quand je transforme en version objet.
Le noeud se trouve selon moi à la ligne 41, quand ma fonction anime() doit appeler la fonction after avant de se relancer. (Je souhaite simplement créer une boucle qui s'interrompra plus tard quand la variable flag passera à 0 - partie de code non encore écrite).
Je me rends bien compte que self.fen.after est incorrect car la classe Ball n'a pas de méthode after.. Idem pour self.fen.. Mais comment faire référence à la fenêtre pour que cela fonctionne?
Merci beaucoup pour votre aide
Le code est:
J'en profite, car j'ai une deuxième question sur un sujet un peu similaire, mais qui concerne cette fois la méthode AFTER avec Tkinter.
J'essaie tout simplement l'exercice d'animation automatique d'une balle, que je comprends bien en version procédurale, mais ici je coince un peu quand je transforme en version objet.
Le noeud se trouve selon moi à la ligne 41, quand ma fonction anime() doit appeler la fonction after avant de se relancer. (Je souhaite simplement créer une boucle qui s'interrompra plus tard quand la variable flag passera à 0 - partie de code non encore écrite).
Je me rends bien compte que self.fen.after est incorrect car la classe Ball n'a pas de méthode after.. Idem pour self.fen.. Mais comment faire référence à la fenêtre pour que cela fonctionne?
Merci beaucoup pour votre aide
Le code est:
# Code pour créer une balle animée dans le canevas class Application(object): "Classe de création de l'application" def __init__(self): #Création de la fenêtre self.fen = Tk() self.fen.title('Jeu de la balle') #Création du canevas self.can=Canvas(height=500, width=500, bg='aliceblue') self.can.pack() #Instanciation d'un objet de la classe Ball ball1=Ball(self.can, 200, 200, 30, 'lightskyblue') #Mise en mouvement de la balle ball1.anime() # Mise en alerte de la fenetre self.fen.mainloop() class Ball(object): "Classe de création d'une balle" def __init__(self, canevas, x=100, y=100, r=20, color='white'): self.can = canevas self.x = x self.y = y self.r = r self.color = color self.flag = 1 self.oval = self.can.create_oval(self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r,fill=self.color) def anime(self): self.x += 5 print(self.x) self.y += 5 self.can.coords(self.oval,self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r) if self.flag==1: self.fen.after(100,ball1.anime) self.anime() #----PROGRAMME PRINCIPAL----- if __name__=='__main__': from tkinter import * f=Application()
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai trouvé la cause.. Je ne passais pas self.fen en paramètre au moment de l'instanciation de l'objet ball1. Donc cet objet ne pouvait pas être appelé.
Voici mon auto-correction:
Voici mon auto-correction:
# Code pour créer une balle animée dans le canevas # Attention, il faut bien passer la fenetre en parametres! class Application(object): "Classe de création de l'application" def __init__(self): #Création de la fenêtre self.fen = Tk() self.fen.title('Jeu de la balle') #Création du canevas self.can=Canvas(height=500, width=500, bg='aliceblue') self.can.pack() #Instanciation d'un objet de la classe Ball ball1=Ball(self.fen, self.can, 200, 200, 30, 'lightskyblue') #Mise en mouvement de la balle ball1.anime() # Mise en alerte de la fenetre self.fen.mainloop() class Ball(object): "Classe de création d'une balle" def __init__(self, fenetre, canevas, x=100, y=100, r=20, color='white'): self.fen = fenetre self.can = canevas self.x = x self.y = y self.r = r self.color = color self.flag = 1 self.oval = self.can.create_oval(self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r,fill=self.color) def anime(self): self.x += 5 print(self.x) self.y += 5 self.can.coords(self.oval,self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r) if self.flag >0: self.fen.after(10,self.anime) #----PROGRAMME PRINCIPAL----- if __name__=='__main__': from tkinter import * f=Application()
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
6 sept. 2020 à 09:05
6 sept. 2020 à 09:05
Bonjour Laxfiskar,
OK, donc tout va bien maintenant ...
OK, donc tout va bien maintenant ...