Pages : 1
#1 Le 23/04/2016, à 11:03
- LeSmaug
Programme Tkinter
Bonjour à tous, je suis en terminale S et j'ai pris la spécialité Isn car je m'intéresse à l'informatique. Pour mon projet de fin d'année j'ai décidé de faire une sorte de partie de ping pong en tkinter, mon programme à du mal à avancer mais il est trop tard pour faire demi tour. J'ai besoin de votre aide car je suis bloqué (message d'erreur) et je ne comprend pas pourquoi.Aidez moi svp. Voici mon programme :
from tkinter import *
import math,random
fenetre = Tk()
LARGEUR = 480
HAUTEUR = 320
RAYON = 5 # rayon de la balle
# position initiale au milieu
X = LARGEUR/2
Y = HAUTEUR/2
# direction initiale aléatoire
vitesse = random.uniform(1.8,2)*5
angle = random.uniform(0,2*math.pi)
DX = vitesse*math.cos(angle)
DY = vitesse*math.sin(angle)
# fonction touche clavier
def clavier(event):
global coords
touche = event.keysym
if touche == "Up":
coords = (coords[0], coords[1] - 10)
elif touche == "Down":
coords = (coords[0], coords[1] + 10)
# changement de coordonnées pour le rectangle
canvas.coords(rectangle, coords[0], coords[1], coords[0]+25, coords[1]+50)
# fonction déplacement de balle
def deplacement():
global X,Y,DX,DY,RAYON,LARGEUR,HAUTEUR
# rebond à droite
if X+RAYON+DX > LARGEUR:
X = 2*(LARGEUR-RAYON)-X
DX = -DX
# rebond à gauche
if X-RAYON+DX < 0:
X = 2*RAYON-X
DX = -DX
# rebond en bas
if Y+RAYON+DY > HAUTEUR:
Y = 2*(HAUTEUR-RAYON)-Y
DY = -DY
# rebond en haut
if Y-RAYON+DY < 0:
Y = 2*RAYON-Y
DY = -DY
X = X+DX
Y = Y+DY
# affichage
canvas.coords(Balle,X-RAYON,Y-RAYON,X+RAYON,Y+RAYON)
# mise à jour toutes les 50 ms
Mafenetre.after(50,deplacement)
# coordonnées initiales
coords = (0, 0)
# création du rectangle
rectangle = Canvas.create_rectangle(0,0,25,50,fill="violet")
# Création de la balle
Balle = Canvas.create_oval(X-RAYON,Y-RAYON,X+RAYON,Y+RAYON,width=1,fill='green')
# ajout du bond sur les touches du clavier
canvas.focus_set()
canvas.bind("<Key>", clavier)
# Création canvas
canvas = Canvas(fenetre,height=HAUTEUR,width=LARGEUR,bg='white')
canvas.pack(padx=5,pady=5)
Hors ligne
#2 Le 23/04/2016, à 11:10
- pingouinux
Re : Programme Tkinter
Bonjour,
Pour que ce soit lisible, merci de mettre le programme (et les messages d'erreur) entre balises-code <>.
Quel est le message d'erreur ?
Hors ligne
#3 Le 23/04/2016, à 11:28
- LeSmaug
Re : Programme Tkinter
Programme:
<
from tkinter import *
import math,random
fenetre = Tk()
LARGEUR = 480
HAUTEUR = 320
RAYON = 5 # rayon de la balle
# position initiale au milieu
X = LARGEUR/2
Y = HAUTEUR/2
# direction initiale aléatoire
vitesse = random.uniform(1.8,2)*5
angle = random.uniform(0,2*math.pi)
DX = vitesse*math.cos(angle)
DY = vitesse*math.sin(angle)
# fonction touche clavier
def clavier(event):
global coords
touche = event.keysym
if touche == "Up":
coords = (coords[0], coords[1] - 10)
elif touche == "Down":
coords = (coords[0], coords[1] + 10)
# changement de coordonnées pour le rectangle
canvas.coords(rectangle, coords[0], coords[1], coords[0]+25, coords[1]+50)
# fonction déplacement de balle
def deplacement():
global X,Y,DX,DY,RAYON,LARGEUR,HAUTEUR
# rebond à droite
if X+RAYON+DX > LARGEUR:
X = 2*(LARGEUR-RAYON)-X
DX = -DX
# rebond à gauche
if X-RAYON+DX < 0:
X = 2*RAYON-X
DX = -DX
# rebond en bas
if Y+RAYON+DY > HAUTEUR:
Y = 2*(HAUTEUR-RAYON)-Y
DY = -DY
# rebond en haut
if Y-RAYON+DY < 0:
Y = 2*RAYON-Y
DY = -DY
X = X+DX
Y = Y+DY
# affichage
canvas.coords(Balle,X-RAYON,Y-RAYON,X+RAYON,Y+RAYON)
# mise à jour toutes les 50 ms
Mafenetre.after(50,deplacement)
# coordonnées initiales
coords = (0, 0)
# création du rectangle
rectangle = Canvas.create_rectangle(0,0,25,50,fill="violet")
# Création de la balle
Balle = Canvas.create_oval(X-RAYON,Y-RAYON,X+RAYON,Y+RAYON,width=1,fill='green')
# ajout du bond sur les touches du clavier
canvas.focus_set()
canvas.bind("<Key>", clavier)
# Création canvas
canvas = Canvas(fenetre,height=HAUTEUR,width=LARGEUR,bg='white')
canvas.pack(padx=5,pady=5)
>
message d'erreur:
<
line 69, in <module>
rectangle = Canvas.create_rectangle(0,0,25,50,fill="violet")
File "C:\Users\Ordinateur\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 2340, in create_rectangle
return self._create('rectangle', args, kw)
AttributeError: 'int' object has no attribute '_create'
>
ps: désolé si je n'ai pas bien mis les balises-code.
Hors ligne
#4 Le 23/04/2016, à 11:52
- pingouinux
Re : Programme Tkinter
Essaye en définissant
canvas = Canvas(fenetre,height=HAUTEUR,width=LARGEUR,bg='white')
avant
# création du rectangle
rectangle = canvas.create_rectangle(0,0,25,50,fill="violet")
# Création de la balle
Balle = canvas.create_oval(X-RAYON,Y-RAYON,X+RAYON,Y+RAYON,width=1,fill='green')
Dans ces 2 commandes, on utilise la variable canvas définie avant.
Lancer ensuite la boucle avec :
fenetre.mainloop()
Pour les balises-code, il faut utiliser l'icône <> au-dessus de la zone de composition du message.
Hors ligne
#5 Le 23/04/2016, à 12:36
- LeSmaug
Re : Programme Tkinter
Merci de ta proposition mais le programme de fonctionne toujours pas, il m'affiche le même message d'erreur.
Hors ligne
#6 Le 23/04/2016, à 16:19
- pingouinux
Re : Programme Tkinter
As-tu corrigé le programme comme je te l'ai indiqué en #4. Notamment, sur les lignes définissant rectangle et Balle, Canvas a été remplacé par canvas.
Sinon, montre ton programme corrigé (entre balises-code).
Hors ligne
Pages : 1