Une fonction à l'intérieur d'une fonction.

Recherchedesavoir Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
Recherchedesavoir Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je travail toujours sur le programme de mon jeu, et j'ai réussis à faire en sorte que mon interface de base puisse accéder à la partie "jeu" de mon programme, qui n'est qu'un déplacement d'un carré grâce au flèches directionnels. Cependant, lorsque j'appuie sur le bouton "jouer" de mon interface, j'arrive bien sur la partie du programme qui me permet de déplacer mon petit carré mais je n'ai pas la possibilité de le déplacer.
Lorsque j'appuie sur une des flèche directionnel, je reçoit ce message la sur ma boite de dialogue :
"Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Justine\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 1549, in __call__
return self.func(*args)
File "C:\Users\Justine\Desktop\Jeu\Jeu.py", line 20, in clavier
coords = (coords[0] + 18, coords[1])
NameError: name 'coords' is not defined"

J'aimerais donc savoir pourquoi je n'arrive pas à faire déplacer le carré...

En vous remerciant de vos réponses,
Cordialement.

Ci-joint une photo ayant le programme et le jeu :
A voir également:

2 réponses

dsy73 Messages postés 9252 Date d'inscription   Statut Contributeur Dernière intervention   2 485
 
Salut
coords semble inconnu à cet endroit du programme. Quel est le but de "global coords" selon toi ?
0
Recherchedesavoir Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonjour, Bonsoir,

"Global coords" sert à définir la fonction de déplacement dans un espace?
J'avoue comprendre tout le reste de cette partie mais pas "global coords".

En cherchant sur internet j'ai trouver quelque chose qui dit que global permet de trouver une variable x en dehors de la section. Cela veut donc dire qu'il faut que je programme coords a part de la fonction "jouer" et qu'avec global, je la récupère?
0
dsy73 Messages postés 9252 Date d'inscription   Statut Contributeur Dernière intervention   2 485
 
Oui.
Mais je n'ai pas pu lire tout ton code, utilise le bouton "code" plutôt qu'une image.
0
Recherchedesavoir Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   2 > dsy73 Messages postés 9252 Date d'inscription   Statut Contributeur Dernière intervention  
 
Comme ceci?

from tkinter import*
from tkinter.messagebox import*
from math import*
from random import*
from tkinter.filedialog import*

#------------------------------------------------------------------------------#
def Jouer():
can.grid_forget()
boutonQ.grid_forget()
boutonJ.grid_forget()
def clavier(event):
global coords
touche=event.keysym
if touche == "Up":
coords = (coords[0], coords[1] - 9)
elif touche == "Down":
coords = (coords[0], coords[1] + 9)
elif touche == "Right":
coords = (coords[0] + 9, coords[1])
elif touche == "Left":
coords = (coords[0] - 9, coords[1])
canvas.coords(rectangle, coords[0], coords[1], coords[0]+9, coords[1]+9)
canvas = Canvas(fenetre, width=800, height=600, bg="white")
coords = (0,0)
rectangle = canvas.create_rectangle(0,0,12,12,fill="green")
canvas.focus_set()
canvas.bind("<Key>", clavier)
canvas.grid()

#------------------------------------------------------------------------------#

fenetre = Tk()
fenetre.title("My Game")

photo1=PhotoImage(file="Monstro.png")
can = Canvas(fenetre,bg='white',width=300, height=150)
img=can.create_image(0,0,anchor='nw',image=photo1)
can.grid(row=0,column=0,columnspan=2,sticky=N+S+E+W,padx=4,pady=4)

boutonJ=Button(fenetre, text=" JOUER ",font=('arial',15), command=Jouer)
boutonJ.grid(row=1,column=0,sticky=W,padx=2,pady=2)

boutonQ=Button(fenetre, text="QUITTER",font=('arial',15), command=fenetre.quit)
boutonQ.grid(row=1,column=1,sticky=E,padx=2,pady=2)

fenetre.mainloop()
0
dragoflyy
 
Pourquoi tu ne fait pas une class?
je dois malheureusement rajouter une fonction "J()", je ne sais pas bien si elle est nécessaire ou pas...
# -------------------------------------------------------
class Jouer():
    def __init__(self):
        global can
        self.can = can
        self.can.grid_forget()
        boutonQ.grid_forget()
        boutonJ.grid_forget()
        self.canvas = Canvas(fenetre, width=800, height=600, bg="white")
        self.coords = (0,0)
        self.rectangle = self.canvas.create_rectangle(0,0,12,12,fill="green")
        self.canvas.focus_set()
        self.canvas.bind("<Key>", self.clavier)
        self.canvas.grid()
    def clavier(self, event):
        touche=event.keysym
        if  touche == "Up":
            self.coords = (self.coords[0], self.coords[1] - 9)
        elif touche == "Down":
            self.coords = (self.coords[0], self.coords[1] + 9)
        elif touche == "Right":
            self.coords = (self.coords[0] + 9, self.coords[1])
        elif touche == "Left":
           self. coords = (self.coords[0] - 9, self.coords[1])
        self.canvas.coords(self.rectangle, self.coords[0], self.coords[1], self.coords[0]+9, self.coords[1]+9)

def J():
    s = Jouer()
# ----------------------------------------------------

fenetre = Tk()
fenetre.title("My Game")

photo1=PhotoImage(file="Monstro.png")
can = Canvas(fenetre,bg='white',width=300, height=150)
img=can.create_image(0,0,anchor='nw',image=photo1)
can.grid(row=0,column=0,columnspan=2,sticky=N+S+E+W,padx=4,pady=4)

boutonJ=Button(fenetre, text="  JOUER  ",font=('arial',15), command=J)
boutonJ.grid(row=1,column=0,sticky=W,padx=2,pady=2)

boutonQ=Button(fenetre, text="QUITTER",font=('arial',15), command=fenetre.quit)
boutonQ.grid(row=1,column=1,sticky=E,padx=2,pady=2)

fenetre.mainloop()


désole de l'attente
0
Recherchedesavoir Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   2 > dragoflyy
 
Pas de soucis pour l'attente, je te remercie de ta réponse!

J'ai fait une nouvelle fonction global contenant tout ce qui est définition clavier donc je vais testé et voir si ça fonctionne..
Mais demain j'ai ISN donc je vais voir avec mon professeur! :)

Je vous tiens au courant :)
0