IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

[Tkinter] Un petit souçis d'event avec Tkinter [Fait]


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 20
    Points
    20
    Par défaut [Tkinter] Un petit souçis d'event avec Tkinter
    Bonjour tout le monde.

    Je suis plutôt débutant en python. J'essaye de faire un petit jeu pong en m'aidant de la librairie Tk pour le fenêtrage. Cependant, j'ai un petit soucis au niveau des évenements: Pour déplacer chacune des deux barres représentant les joueurs, je compte utiliser les touches du pavé numérique:
    le "1" et le "7" pour faire ou descendre la barre de gauche et le "3" et le "9" pour celle de droite. Mais le bout de code suivant ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    class Application(Frame):
    	"Classe Application. C'est la classe principale du programme. Elle instancie toutes les autres classes."
     
    	def __init__(self):
    		"Constructeur de la classe Application."
     
    		Frame.__init__(self)
    		self.master.title("Pong")
    		self.pack()
    		self.terrain=Canvas(self,width=ABSCISSE,height=ORDONNEE,bg="white")
    		self.terrain.pack()
    		self.mode="pause"
    		self.bouton=Button(self,text="play",command=self.changermode)
    		self.bouton.pack()
    		self.barre1=Barre(self.terrain,"gauche")
    		self.barre2=Barre(self.terrain,"droite")
     
    		self.terrain.bind("<KP_7>",self.barre1.monter)
    		self.terrain.bind("<KP_1>",self.barre1.descendre)
    		self.terrain.bind("<KP_9>",self.barre2.monter)
    		self.terrain.bind("<KP_3>",self.barre2.descendre)
     
    		self.balle=Balle(self.terrain)
    Alors que quand je remplace par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		self.terrain.bind("<Button-1>",self.barre1.monter)
    		self.terrain.bind("<Button-3>",self.barre1.descendre)
    Le code fonctionne.
    Donc je ne comprend pas: ça fonctionne avec la souris mais pas avec le clavier !? Là je ne sais pas du tout comment faire !

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    ce serait pas plutôt ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         self.terrain.bind("7",self.barre1.monter) 
          self.terrain.bind("1",self.barre1.descendre) 
          self.terrain.bind("9",self.barre2.monter) 
          self.terrain.bind("3",self.barre2.descendre)
    ( Je pense que les nombres sont des touches normales: http://python.developpez.com/faq/?page=TkKeyEvent#TkKey )
    (sinon, est-ce que le "Verr Num" est bien allumé ?)

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Merci de répondre aussi rapidement !

    Et ben malheureusement non, l'évenement <1> est équivalent à <Button-1> qui est le bouton gauche de la souris (et qui lui fonctionne), alors que ce que j'aimerais, c'est que l'évenement soit sur le pavé numérique et j'ai cru voir que cet évenement s'appelait <KP_x> avec x un numero de 0 à 9. Je pense aussi que ce soit comme des touches normales, mais en fait après plusieurs tests, il s'avère que aucune touche normale ne marche. Et le ver_num est actif.

    Alors est-ce que mon évenement doit se porter sur le Canevas ou sur un autre objet ?

    PS: voilà ou j'ai eu le nom de l'event:
    http://<br /> http://infohost.nmt.e...mes.html<br />
    Merci beaucoup pour votre aide

  4. #4
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    T'as essayé les key "2", "4", "6", "8" sans les <> ?
    parce que j'ai fait le test sur le casse brique récupéré ici et ca marche très bien
    Peut-être ca vient aussi de la façon de définir l'évènement. Essaye avec ce code (celui utilisé dans le casse brique)

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Super cool, merci ça fonctionne:
    J'ai mis "7" et non pas "<KP_7>" ou "<7>".
    Et j'ai fait self.bind_all.
    En bref voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.bind_all("7",self.barre1.monter)
    Donc plus de problème du côté des évenements !

    Seulement, il y un nouveau problème du côté du déplacement de la balle (qui est dans un thread à part): au bout d'un certain moment (qui me semble aléatoire) après que j'ai déplacé les barres, la balle s'arrête et j'ai un message d'erreur dans la console.

    Je vais un peu réfléchir à ce problème avant de vous redemander de l'aide.

    En tout cas merci beaucoup Guigui_

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PYGAME] interfacage avec Tkinter & petit pb.
    Par Luke spywoker dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 13/08/2012, 11h04
  2. Canvas avec Tkinter
    Par darksh3ll dans le forum Tkinter
    Réponses: 1
    Dernier message: 03/08/2007, 15h42
  3. Réponses: 2
    Dernier message: 27/05/2007, 02h38
  4. IDLE plante avec Tkinter
    Par von_magnus dans le forum EDI/RAD
    Réponses: 2
    Dernier message: 06/07/2006, 07h20
  5. [Tkinter] Plusieurs fenêtre avec Tkinter
    Par cyrpaut dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/01/2006, 22h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo