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

Fermé
Recherchedesavoir Messages postés 8 Date d'inscription samedi 6 février 2016 Statut Membre Dernière intervention 15 juillet 2018 - 6 mars 2016 à 20:45
Recherchedesavoir Messages postés 8 Date d'inscription samedi 6 février 2016 Statut Membre Dernière intervention 15 juillet 2018 - 22 mars 2016 à 22:42
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 dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 482
7 mars 2016 à 03:45
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 samedi 6 février 2016 Statut Membre Dernière intervention 15 juillet 2018 1
9 mars 2016 à 00:21
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 dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 482
9 mars 2016 à 06:30
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 samedi 6 février 2016 Statut Membre Dernière intervention 15 juillet 2018 1 > dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020
9 mars 2016 à 17:07
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
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 samedi 6 février 2016 Statut Membre Dernière intervention 15 juillet 2018 1 > dragoflyy
22 mars 2016 à 22:42
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