Skip to content

Commit e3e3cd0

Browse files
Only set user_data for virtual events and detail for corresponding events.
1 parent 0ec1de1 commit e3e3cd0

2 files changed

Lines changed: 23 additions & 12 deletions

File tree

Lib/test/test_tkinter/test_misc.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ def test_focus(self):
636636
self.assertEqual(e.x_root, '??')
637637
self.assertEqual(e.y_root, '??')
638638
self.assertEqual(e.delta, 0)
639-
self.assertEqual(e.user_data, 'NotifyAncestor')
639+
self.assertEqual(e.user_data, '??')
640640
self.assertEqual(e.detail, 'NotifyAncestor')
641641
self.assertEqual(repr(e), '<FocusIn event>')
642642

@@ -746,10 +746,17 @@ def test_event_generate_enter(self):
746746
self.assertEqual(e.x_root, 100 + f.winfo_rootx())
747747
self.assertEqual(e.y_root, 50 + f.winfo_rooty())
748748
self.assertEqual(e.delta, 0)
749-
self.assertEqual(e.user_data, 'NotifyAncestor')
749+
self.assertEqual(e.user_data, '??')
750750
self.assertEqual(e.detail, 'NotifyAncestor')
751751
self.assertEqual(repr(e), '<Enter event focus=False x=100 y=50>')
752752

753+
f.event_generate('<Enter>', x=100, y=50, detail='NotifyPointer')
754+
self.assertEqual(len(events), 2, events)
755+
e = events[1]
756+
self.assertIs(e.type, tkinter.EventType.Enter)
757+
self.assertEqual(e.user_data, '??')
758+
self.assertEqual(e.detail, 'NotifyPointer')
759+
753760
def test_event_generate_button_press(self):
754761
f = tkinter.Frame(self.root, width=150, height=100)
755762
f.pack()
@@ -858,7 +865,7 @@ def test_event_generate_mouse_wheel(self):
858865
self.assertEqual(e.detail, '??')
859866
self.assertEqual(repr(e), '<MouseWheel event delta=-5 x=100 y=50>')
860867

861-
def test_generate_event_virtual_event(self):
868+
def test_event_generate_virtual_event(self):
862869
f = tkinter.Frame(self.root, width=150, height=100)
863870
f.pack()
864871
self.root.wait_visibility() # needed on Windows
@@ -891,7 +898,7 @@ def test_generate_event_virtual_event(self):
891898
self.assertEqual(e.y_root, -1)
892899
self.assertEqual(e.delta, 0)
893900
self.assertEqual(e.user_data, '')
894-
self.assertEqual(e.detail, '')
901+
self.assertEqual(e.detail, '??')
895902
self.assertEqual(repr(e),
896903
f"<VirtualEvent event x=50 y=0>")
897904

@@ -900,7 +907,7 @@ def test_generate_event_virtual_event(self):
900907
e = events[1]
901908
self.assertIs(e.type, tkinter.EventType.VirtualEvent)
902909
self.assertEqual(e.user_data, 'spam')
903-
self.assertEqual(e.detail, 'spam')
910+
self.assertEqual(e.detail, '??')
904911

905912

906913
class BindTest(AbstractTkTest, unittest.TestCase):

Lib/tkinter/__init__.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,10 @@ class Event:
255255
type - type of the event as a number
256256
widget - widget in which the event occurred
257257
delta - delta of wheel movement (MouseWheel)
258-
detail - certain fixed strings (see tcl/tk documentation)
258+
detail - certain fixed strings (see Tcl/Tk documentation)
259259
(Enter, Leave, FocusIn, FocusOut, ConfigureRequest)
260-
user_data - data string which was passed to event_generate or empty string
261-
(VirtualEvent)
260+
user_data - data string which was passed to event_generate() or empty
261+
string (VirtualEvent)
262262
"""
263263

264264
def __repr__(self):
@@ -1542,7 +1542,7 @@ def bind(self, sequence=None, func=None, add=None):
15421542
<Alt-A> for pressing A and the Alt key (KeyPress can be omitted).
15431543
An event pattern can also be a virtual event of the form
15441544
<<AString>> where AString can be arbitrary. This
1545-
event can be generated by event_generate.
1545+
event can be generated by event_generate().
15461546
If events are concatenated they must appear shortly
15471547
after each other.
15481548
@@ -1754,7 +1754,7 @@ def getint_event(s):
17541754
# serial field: valid for all events
17551755
# number of button: ButtonPress and ButtonRelease events only
17561756
# detail: for Enter, Leave, FocusIn, FocusOut and ConfigureRequest
1757-
# events certain fixed strings (see tcl/tk documentation)
1757+
# events certain fixed strings (see Tcl/Tk documentation)
17581758
# user_data: data string from a virtual event or an empty string
17591759
# height field: Configure, ConfigureRequest, Create,
17601760
# ResizeRequest, and Expose events only
@@ -1769,8 +1769,12 @@ def getint_event(s):
17691769
# KeyRelease, and Motion events
17701770
e.serial = getint(nsign)
17711771
e.num = getint_event(b)
1772-
e.user_data = d
1773-
e.detail = d
1772+
if T == EventType.VirtualEvent:
1773+
e.user_data = d
1774+
e.detail = '??'
1775+
else:
1776+
e.user_data = '??'
1777+
e.detail = d
17741778
try: e.focus = getboolean(f)
17751779
except TclError: pass
17761780
e.height = getint_event(h)

0 commit comments

Comments
 (0)