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:
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 !