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 :

Détection d'événement <Enter> juste après <ButtonPress-1>


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1
    Par défaut Détection d'événement <Enter> juste après <ButtonPress-1>
    Bonjour,

    Je travaille sur un widget qui comporte 3 boutons disposés ainsi :
    [a][b][c]
    Je souhaite pouvoir faire :
    - un <ButtonPress-1> sur le bouton [a],
    - puis déplacer la souris sur le bouton [b] et détecter cet événement <Enter>,
    - puis déplacer la souris sur le bouton [c] et détecter cet événement <Enter>,
    - puis faire un <ButtonRelease-1> sur le bouton [c].

    Ce qui ne fonctionne pas : je ne détecte pas l'événement <Enter> sur le bouton [b], et je ne détecte l'événement <Enter> sur le bouton [c] qu'après le <ButtonRelease-1> (et non au moment où le pointeur de souris entre sur le bouton [c]).
    Tout se passe comme si le fait de laisser le bouton 1 appuyé désactivait la détection des événements <Enter> sur les autres boutons.

    Voici le code :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #!/usr/bin/python
     
    import Tkinter
    from Tkinter import *
    import tkMessageBox
    import tkFont
    import sys
    import traceback
    #import Tix
    from tkFileDialog import *
    import os
    import string
     
    class ButtonsPanel(Frame):
    	def __init__(self, parent):
    		self.m_Parent = parent
    		Frame.__init__(self, parent)
     
    		# Define the 3 buttons
    		self.m_Button1 = Button(self)
    		self.m_Button2 = Button(self)
    		self.m_Button3 = Button(self)
     
    		# Grid the 3 buttons
    		self.m_Button1.grid()
    		self.m_Button2.grid(row=0,column=1)
    		self.m_Button3.grid(row=0,column=2)
     
    		# Bind Press and Release events on buttons
    		self.bind_all("<ButtonPress-1>", self.cmdPress)
    		self.bind_all("<ButtonRelease-1>", self.cmdRelease)
     
    		# Bind events when mouse enters into a button
    		self.bind_all("<Enter>", self.cmdEnter)
     
    	def cmdPress(self, event):
    		if self.winfo_containing(event.x_root, event.y_root) == self.m_Button1:
    			print "Button 1 pressed"
    		elif self.winfo_containing(event.x_root, event.y_root) == self.m_Button2:
    			print "Button 2 pressed"
    		elif self.winfo_containing(event.x_root, event.y_root) == self.m_Button3:
    			print "Button 3 pressed"
     
    	def cmdRelease(self, event):
    		if self.winfo_containing(event.x_root, event.y_root) == self.m_Button1:
    			print "Button 1 released"
    		elif self.winfo_containing(event.x_root, event.y_root) == self.m_Button2:
    			print "Button 2 released"
    		elif self.winfo_containing(event.x_root, event.y_root) == self.m_Button3:
    			print "Button 3 released"
     
    	def cmdEnter(self, event):
    		if self.winfo_containing(event.x_root, event.y_root) == self.m_Button1:
    			print "Entered in button 1"
    		elif self.winfo_containing(event.x_root, event.y_root) == self.m_Button2:
    			print "Entered in button 2"
    		elif self.winfo_containing(event.x_root, event.y_root) == self.m_Button3:
    			print "Entered in button 3"
     
    if __name__ == "__main__":
    	# Instance of the main window application
    	app = Tk()
    	panel = ButtonsPanel(app)
    	panel.grid()
     
    	# Wait for events
    	app.mainloop()
    En espérant que ce problème vous divertisse et que vous trouviez une solution...
    Merci !

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 32
    Par défaut
    bonjour,

    essaie peut être sans utiliser des Bind_all mais plutot des bind sur les différents boutons.

    ++

  3. #3
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    Je ne crois pas que cela soit possible :
    Lorsque tu cliques sur un widget, tous les évènements de la souris sont envoyés à ce widget, jusqu'à ce que tu relâches le bouton.

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2009, 14h03
  2. Réponses: 1
    Dernier message: 27/07/2006, 10h30
  3. Détection des événements sur un form
    Par Jik70 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/04/2006, 12h49
  4. [FLASH 8] Détection de la touche ENTER
    Par Destiny dans le forum Flash
    Réponses: 1
    Dernier message: 10/03/2006, 15h21
  5. [Win XP] La machine s'arrête seule juste après avoir démarré
    Par Giovanny Temgoua dans le forum Windows XP
    Réponses: 5
    Dernier message: 05/12/2005, 10h02

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