Gestionnaire d'evenement planté?

bonjour
j'ai un leger probleme avec un script python
le gestionnaire d'evenement ne semble pas marcher : les fonctions qui sont sencé etre appelé par les touches fléchées ne sont jammais appelées.
auriez vous une réponse a ce probleme

je precise que si mon code n'est pas forcement dans les régles de l'art (je débute) il ne contient je croit aucune erreur (je l'ai testé et retesté)

merci
Configuration: Windows XP
Firefox 2.0.0.6

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonsoir,

    il faudrait je pense poster ton code ici pour que les spécialistes python puissent t'aider ;)

    Sinon on ne va pas pouvoir t'aider ou t'orienter pour résoudre ton souci.

    Loup.
    1. oui désolé voila le code
      je cherché a fer un petit jeu de labirinthe (je n'en suis qu'au début mais déja sa bloque)
      je met en gras la partie du code que j'ai édité entre le moment ou sa a marché et celui ou sa a plus voulu
      auparavent jouvrait simplement le mem fichier sans donner le choix

      # -*- coding: cp1252 -*-
      from Tkinter import*
      from os import chdir
      import tkFileDialog
      chdir("C:/Documents and Settings/Session 1/Bureau")
      global x,y,X,Y,largeur_case, hauteur_case
      x,y,X,Y=0,0,0,0
      #taille des cases
      largeur_case, hauteur_case=50, 50

      #fenetre principale du jeu
      Root=Tk()

      #map
      map=[]
      temp=[]
      try :
      #chargement du fichier de map
      file = tkFileDialog.askopenfile(parent=Root,filetypes=[('carte Labyrint','*.map')], mode='rb',title='Choisissez une map')
      if file != None:
      fichier=file.readlines()
      file.close()

      #extraction de la map du fichier
      for lignes in fichier:
      if lignes[-1:]=="\n":
      lignes=lignes[:-1]
      if lignes[-1:]=="\r":
      lignes=lignes[:-1]
      temp=[]
      for car in lignes:
      temp.append(car)
      map.append(temp)

      except :
      Label(Root, text="Fichier inexistant", fg="red").pack()
      else :
      #verification de l'égalité de la longueur de toutes les lignes
      error=0
      long_ligne=len(map[0])
      for ligne in map:
      if len(ligne)!=long_ligne:
      error=1
      type_error=map.index(ligne)
      break
      #verification de la presence d'une entrée et d'une sortie
      entree=0
      sortie=0
      coord_entree=[]
      for ligne in map:
      for colonne in ligne:
      if colonne=='2':
      entree+=1
      if entree==1:
      coord_entree.append(ligne.index(colonne))
      coord_entree.append(map.index(ligne))
      if colonne=='3':
      sortie+=1
      #verification de la validité de la map
      if error!=0:
      Label(Root, text="Impossible de charger la map : non conformité de la longueur des lignes a la ligne :" + str(type_error), fg="red").pack()
      elif entree==0:
      Label(Root,text="Impossible de charger la map : elle ne contient pas d'entree", fg="red").pack()
      elif sortie==0:
      Label(Root,text="Impossible de charger la map : elle ne contient pas de sortie(s) ", fg="red").pack()
      else:
      #dessin de la map
      can=Canvas(Root, width=largeur_case*(len(map[0])), height=hauteur_case*len(map), bg="white")
      can.pack()
      for ligne in map:
      x=0
      for colonne in ligne:
      if colonne=='0':
      couleur="white"
      elif colonne=='1':
      couleur="black"
      elif colonne=='2':
      couleur="green"
      elif colonne=='3':
      couleur="red"
      else:
      couleur="yellow"
      can.create_rectangle(largeur_case*x,hauteur_case*y,largeur_case*(x+1),hauteur_case*(y+1), width=0,fill=couleur)
      x+=1
      y+=1
      #dessin du personnage en position initiale
      X=coord_entree[0]
      Y=coord_entree[1]
      perso=can.create_oval(coord_entree[0]*largeur_case+1,coord_entree[1]*hauteur_case+1,(coord_entree[0]+1)*largeur_case-1,(coord_entree[1]+1)*hauteur_case-1,fill="blue")

      def Trace(abs, ord):
      #trace le personnage
      can.coords(perso,largeur_case*abs+1,hauteur_case*ord+1, largeur_case*(abs+1)-1, hauteur_case*(ord+1)-1)

      #fonctions pour faire bouger le personnage
      def Droite(event):
      global X,Y
      try :
      test=map[Y][X+1]
      #print test
      except:
      #print "error except"
      pass
      else :
      print "else"
      if (test=='0') or (test=='2'):
      X=X+1
      Trace(X,Y)
      elif (test=='3'):
      Gagne()
      else :
      pass

      def Gauche(event):
      global X,Y
      try :
      test=map[Y][X-1]
      #print test
      except:
      #print "error except"
      pass
      else :
      if X-1>=0:
      if (test=='0') or (test=='2'):
      X=X-1
      Trace(X,Y)
      elif test=='3':
      Gagne()
      else :
      pass

      def Bas(event):
      global X,Y
      try :
      test=map[Y+1][X]
      #print test
      except:
      pass
      else :
      if (test=='0') or (test=='2'):
      Y=Y+1
      Trace(X,Y)
      elif test=='3':
      Gagne()
      else :
      pass

      def Haut(event):
      global X,Y
      try :
      test=map[Y-1][X]
      #print test
      except:
      pass
      else :
      if Y-1>=0:
      if (test=='0') or (test=='2'):
      Y=Y-1
      Trace(X,Y)
      elif test=='3':
      Gagne()
      else :
      pass

      #fonctions diverses
      def Quitter():
      Root.destroy()

      def quitter(event):
      Root.destroy()

      def Gagne():
      Root.bind("<Right>", quitter)
      Root.bind("<Left>", quitter)
      Root.bind("<Up>", quitter)
      Root.bind("<Down>", quitter)
      #affichage du message de victoire
      can.destroy()
      Label(Root, text="Gagné", fg="red").pack()
      Button(Root,text="Try again?", command=TryAgain).pack()

      def TryAgain():
      Quitter()

      #definition des commandes pour jouer
      Button(Root, text="Quitter", command=Quitter).pack()
      Root.bind("<Right>", Droite)
      Root.bind("<Left>", Gauche)
      Root.bind("<Up>", Haut)
      Root.bind("<Down>", Bas)
      1. je narrive pas a editer mon message car je me suis apercu trop tard de mon erreur en copiant j'ai oublié la derniere ligne:
        Root.mainloop()
        de plus l'indentation n'a pas été gardée mais bon..