Evenement key_Press, ajouter un argument dans la fonction liée(avec Tkinter)
Résolu/Fermé
enzo_8226
Messages postés
10
Date d'inscription
samedi 24 avril 2021
Statut
Membre
Dernière intervention
26 avril 2021
-
Modifié le 25 avril 2021 à 17:06
enzo_8226 Messages postés 10 Date d'inscription samedi 24 avril 2021 Statut Membre Dernière intervention 26 avril 2021 - 26 avril 2021 à 11:58
enzo_8226 Messages postés 10 Date d'inscription samedi 24 avril 2021 Statut Membre Dernière intervention 26 avril 2021 - 26 avril 2021 à 11:58
A voir également:
- Evenement key_Press, ajouter un argument dans la fonction liée(avec Tkinter)
- Fonction si et - Guide
- Ajouter un compte gmail - Guide
- Ajouter un compte whatsapp - Guide
- Ajouter agenda outlook dans google agenda - Guide
- Ajouter signature word - Guide
6 réponses
yg_be
Messages postés
23417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 janvier 2025
Ambassadeur
1 557
25 avril 2021 à 19:55
25 avril 2021 à 19:55
bonjour,
peux-tu montrer un code complet que nous pouvons tester?
cela nous aidera à comprendre.
peux-tu montrer un code complet que nous pouvons tester?
cela nous aidera à comprendre.
enzo_8226
Messages postés
10
Date d'inscription
samedi 24 avril 2021
Statut
Membre
Dernière intervention
26 avril 2021
25 avril 2021 à 21:18
25 avril 2021 à 21:18
Ok mais je vous prévient il affiche une erreur au démarrage a cause de la variable vitesse (v). Pour le tester sans l'erreur, elever le v la ou je vous le dit.
from tkinter import * import random import time print('test') #balle________________ class Balle: def __init__(self, canvas,raquette, couleur): self.touche_bas=False self.raquette=raquette self.canvas = canvas self.id = canvas.create_oval(10,10,25,25, fill=couleur) self.canvas.move(self.id, 245, 100) departs = [-3, -2, -1, 1, 2, 3] random.shuffle(departs) self.x = departs[0] self.y = -1 self.hauteur_canevas = self.canvas.winfo_height() self.largeur_canevas = self.canvas.winfo_width() def position(self,canvas,x,y): balle.canvas.move( self.id, x, y) def bouge(self,canvas,x,y): self.canvas.move(self.id, x, y) def heurter_raquette(self,pos): pos_raquette=self.canvas.coords(self.raquette.id) global heurter if pos[2] >= pos_raquette[0] and pos[0] <= pos_raquette[2]: if pos[3] >= pos_raquette[1] and pos[3] <= pos_raquette[3]: heurter=1 return True heurter=0 return False def dessiner(self): self.canvas.move(self.id, self.x, self.y) pos = self.canvas.coords(self.id) trajectoire_X=[-1,0,1,2,3] random.shuffle(trajectoire_X) if pos [1] <= 0: self.y=abs(self.y) if pos[3] >= self.hauteur_canevas: self.touche_bas=True if self.heurter_raquette(pos)==True: self.y=-self.y-1 if pos[0] <= 0: self.x=abs(self.x+trajectoire_X[0]) if pos[2] >= self.largeur_canevas: self.x = -abs(self.x+trajectoire_X[0]) #Raquette___________________________________ class Raquette: def __init__(self, canvas, couleur, heurter): self.canvas = canvas self.id = canvas.create_rectangle(0,0,100,10, fill=couleur) self.canvas.move(self.id,200,300) self.x = 0 self.v=-2 self.largeur_canevas = self.canvas.winfo_width() self.canvas.bind_all('<KeyPress-Left>',self.vers_gauche(self.v)) #<enlever le v ici self.canvas.bind_all('<KeyPress-Right>',self.vers_droite(self.v)) def vittesse(heurter,v): if heurter==1: v=v+1 print(v) return v def vers_gauche(self,event,v): #<enlever le v la aussi self.x=-2 # je compte remplacer le -2 par la vittesse v qui augmente, pareil pour (vers_droite) print(event) pos=self.canvas.coords(self.id) if pos[0] <= 0: self.x = 0 def vers_droite(self,event,v): #<enlever le v la aussi self.x=2 pos=self.canvas.coords(self.id) if pos[2] >= self.largeur_canevas: self.x = 0 def dessiner(self,heurter): self.canvas.move(self.id, self.x, 0) pos=self.canvas.coords(self.id) if pos[0] <= 0: self.x = 0 elif pos[2] >= self.largeur_canevas: self.x = 0 #teste_________ class Texte: def __init__(self,canvas,x,y, font,texte): self.canvas=canvas self.id=canvas.create_text(x, y, text= texte, font=(font)) canvas.itemconfig(self.id,state='hidden') def montrer(self,canvas): canvas.itemconfig(self.id,state='normal') def cacher(self,canvas): canvas.itemconfig(self.id,state='hidden') class Comencer(Texte): def init(self,canvas): self.canvas.bind_all('<KeyPress-Return>',self.debut_de_partie) def debut_de_partie(self,event): global deb deb=1 print(' deb = ', deb) #------------------------------------------------------------------- tk=Tk() tk.title('balle rouge') tk.resizable(0, 0) tk.wm_attributes("-topmost", 1) canvas=Canvas(tk, width=500, height=400, bd=0, highlightthickness=0) canvas.pack() tk.update() heurter=0 cacher=True continuer=True raquette = Raquette(canvas,'blue',heurter) balle = Balle(canvas,raquette, 'red') game_over=Texte(canvas,150,225,('Helvetica',25),'GAME OVER') comencer=Comencer(canvas,150,225,('Helvetica',12),'Apuyer sur entrée pour comencer') recomencer=Texte(canvas,200,225,('Helvetica',15),'appuyer sur entrer pour recomencer') deb=0 #------------------------------------------------------------------- while 1: comencer.montrer(canvas) comencer.init(canvas) print(deb) if deb==1: break tk.update_idletasks() tk.update() time.sleep(0.01) while 1: if balle.touche_bas==False: comencer.cacher(canvas) balle.dessiner() raquette.dessiner(heurter) raquette.v = raquette.vittesse(heurter) else: game_over.montrer(canvas) tk.update_idletasks() tk.update() time.sleep(0.01)
yg_be
Messages postés
23417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 janvier 2025
1 557
26 avril 2021 à 10:17
26 avril 2021 à 10:17
suggestions:
ligne 64:
lignes 74 & 75:
ligne 64:
self.canvas.bind_all('<KeyPress-Left>',self.vers_gauche)
lignes 74 & 75:
def vers_gauche(self,event): self.x=self.v
enzo_8226
Messages postés
10
Date d'inscription
samedi 24 avril 2021
Statut
Membre
Dernière intervention
26 avril 2021
26 avril 2021 à 11:17
26 avril 2021 à 11:17
le probleme avec cette methode,
c'est que dans cette fonction, self.v = none, (je l'ai print pour vérifier et c'est ce que j'ai constaté), alors que pourtant je lui ai bien donné une valeur.
def vers_gauche(self,event): self.x=self.v
c'est que dans cette fonction, self.v = none, (je l'ai print pour vérifier et c'est ce que j'ai constaté), alors que pourtant je lui ai bien donné une valeur.
enzo_8226
Messages postés
10
Date d'inscription
samedi 24 avril 2021
Statut
Membre
Dernière intervention
26 avril 2021
Modifié le 26 avril 2021 à 11:23
Modifié le 26 avril 2021 à 11:23
En fait, même à la ligne 168:
raquette.v = raquette.vittesse(heurter)
Si on le print ça nous donne
raquette.v = none
Donc la fonction vitesse renvoie none alors qu'elle est censé renvoyer la variable v
raquette.v = raquette.vittesse(heurter)
Si on le print ça nous donne
raquette.v = none
Donc la fonction vitesse renvoie none alors qu'elle est censé renvoyer la variable v
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
enzo_8226
Messages postés
10
Date d'inscription
samedi 24 avril 2021
Statut
Membre
Dernière intervention
26 avril 2021
26 avril 2021 à 11:38
26 avril 2021 à 11:38
J'ai essayé aussi cette méthode (dans ma boucle while l167-168)
mais Il me disent que j'ai donné 3 argument positionnels pour vitesse :
"vittesse() takes 2 positional arguments but 3 were given".
Mais pourtant il n'y en a que 2.
print(raquette.v) v=raquette.v print(v) v = raquette.vittesse(heurter,v)
mais Il me disent que j'ai donné 3 argument positionnels pour vitesse :
"vittesse() takes 2 positional arguments but 3 were given".
Mais pourtant il n'y en a que 2.
enzo_8226
Messages postés
10
Date d'inscription
samedi 24 avril 2021
Statut
Membre
Dernière intervention
26 avril 2021
26 avril 2021 à 11:58
26 avril 2021 à 11:58
merci Yg_be, grace a ta méthode j'ai réussit, le code qui fonctionne:
from tkinter import * import random import time print('test') #balle________________ class Balle: def __init__(self, canvas,raquette, couleur): self.touche_bas=False self.raquette=raquette self.canvas = canvas self.id = canvas.create_oval(10,10,25,25, fill=couleur) self.canvas.move(self.id, 245, 100) departs = [-3, -2, -1, 1, 2, 3] random.shuffle(departs) self.x = departs[0] self.y = -1 self.hauteur_canevas = self.canvas.winfo_height() self.largeur_canevas = self.canvas.winfo_width() def position(self,canvas,x,y): balle.canvas.move( self.id, x, y) def bouge(self,canvas,x,y): self.canvas.move(self.id, x, y) def heurter_raquette(self,pos): pos_raquette=self.canvas.coords(self.raquette.id) global heurter if pos[2] >= pos_raquette[0] and pos[0] <= pos_raquette[2]: if pos[3] >= pos_raquette[1] and pos[3] <= pos_raquette[3]: heurter=1 return True heurter=0 return False def dessiner(self): self.canvas.move(self.id, self.x, self.y) pos = self.canvas.coords(self.id) trajectoire_X=[-1,0,1,2,3] random.shuffle(trajectoire_X) if pos [1] <= 0: self.y=abs(self.y) if pos[3] >= self.hauteur_canevas: self.touche_bas=True if self.heurter_raquette(pos)==True: self.y=-self.y-1 if pos[0] <= 0: self.x=abs(self.x+trajectoire_X[0]) if pos[2] >= self.largeur_canevas: self.x = -abs(self.x+trajectoire_X[0]) #Raquette___________________________________ class Raquette: def __init__(self, canvas, couleur, heurter): self.canvas = canvas self.id = canvas.create_rectangle(0,0,100,10, fill=couleur) self.canvas.move(self.id,200,300) self.x = 0 self.v=2 self.largeur_canevas = self.canvas.winfo_width() self.canvas.bind_all('<KeyPress-Left>',self.vers_gauche) #<enlever le v ici self.canvas.bind_all('<KeyPress-Right>',self.vers_droite) def vittesse(self,heurter,v): if heurter==1: v=v+1 print(v) return v return v def vers_gauche(self,event): self.x=-self.v print(self.v) pos=self.canvas.coords(self.id) if pos[0] <= 0: self.x = 0 def vers_droite(self,event): #<enlever le v la aussi self.x=self.v pos=self.canvas.coords(self.id) if pos[2] >= self.largeur_canevas: self.x = 0 def dessiner(self,heurter): self.canvas.move(self.id, self.x, 0) pos=self.canvas.coords(self.id) if pos[0] <= 0: self.x = -self.x self.x=0 elif pos[2] >= self.largeur_canevas: self.x = -self.x self.x=0 #teste_________ class Texte: def __init__(self,canvas,x,y, font,texte): self.canvas=canvas self.id=canvas.create_text(x, y, text= texte, font=(font)) canvas.itemconfig(self.id,state='hidden') def montrer(self,canvas): canvas.itemconfig(self.id,state='normal') def cacher(self,canvas): canvas.itemconfig(self.id,state='hidden') class Comencer(Texte): def init(self,canvas): self.canvas.bind_all('<KeyPress-Return>',self.debut_de_partie) def debut_de_partie(self,event): global deb deb=1 print(' deb = ', deb) #------------------------------------------------------------------- tk=Tk() tk.title('balle rouge') tk.resizable(0, 0) tk.wm_attributes("-topmost", 1) canvas=Canvas(tk, width=500, height=400, bd=0, highlightthickness=0) canvas.pack() tk.update() heurter=0 cacher=True continuer=True raquette = Raquette(canvas,'blue',heurter) balle = Balle(canvas,raquette, 'red') game_over=Texte(canvas,150,225,('Helvetica',25),'GAME OVER') comencer=Comencer(canvas,150,225,('Helvetica',12),'Apuyer sur entrée pour comencer') recomencer=Texte(canvas,200,225,('Helvetica',15),'appuyer sur entrer pour recomencer') deb=0 v=raquette.v #------------------------------------------------------------------- while 1: comencer.montrer(canvas) comencer.init(canvas) if deb==1: break tk.update_idletasks() tk.update() time.sleep(0.01) while 1: if balle.touche_bas==False: comencer.cacher(canvas) balle.dessiner() raquette.dessiner(heurter) v = raquette.vittesse(heurter,v) raquette.v=v else: game_over.montrer(canvas) tk.update_idletasks() tk.update() time.sleep(0.01)