Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d611f4c

Browse files
Issue #27294: Improved repr for Tkinter event objects.
1 parent f0d4621 commit d611f4c

2 files changed

Lines changed: 75 additions & 2 deletions

File tree

Lib/tkinter/__init__.py

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
tk.mainloop()
3131
"""
3232

33+
import enum
3334
import sys
3435

3536
import _tkinter # If this fails your Python may not be configured for Tk
@@ -132,6 +133,50 @@ def _splitdict(tk, v, cut_minus=True, conv=None):
132133
dict[key] = value
133134
return dict
134135

136+
137+
class EventType(str, enum.Enum):
138+
KeyPress = '2'
139+
Key = KeyPress,
140+
KeyRelease = '3'
141+
ButtonPress = '4'
142+
Button = ButtonPress,
143+
ButtonRelease = '5'
144+
Motion = '6'
145+
Enter = '7'
146+
Leave = '8'
147+
FocusIn = '9'
148+
FocusOut = '10'
149+
Keymap = '11' # undocumented
150+
Expose = '12'
151+
GraphicsExpose = '13' # undocumented
152+
NoExpose = '14' # undocumented
153+
Visibility = '15'
154+
Create = '16'
155+
Destroy = '17'
156+
Unmap = '18'
157+
Map = '19'
158+
MapRequest = '20'
159+
Reparent = '21'
160+
Configure = '22'
161+
ConfigureRequest = '23'
162+
Gravity = '24'
163+
ResizeRequest = '25'
164+
Circulate = '26'
165+
CirculateRequest = '27'
166+
Property = '28'
167+
SelectionClear = '29' # undocumented
168+
SelectionRequest = '30' # undocumented
169+
Selection = '31' # undocumented
170+
Colormap = '32'
171+
ClientMessage = '33' # undocumented
172+
Mapping = '34' # undocumented
173+
VirtualEvent = '35', # undocumented
174+
Activate = '36',
175+
Deactivate = '37',
176+
MouseWheel = '38',
177+
def __str__(self):
178+
return self.name
179+
135180
class Event:
136181
"""Container for the properties of an event.
137182
@@ -174,7 +219,30 @@ class Event:
174219
widget - widget in which the event occurred
175220
delta - delta of wheel movement (MouseWheel)
176221
"""
177-
pass
222+
def __repr__(self):
223+
state = {k: v for k, v in self.__dict__.items() if v != '??'}
224+
if not self.char:
225+
del state['char']
226+
elif self.char != '??':
227+
state['char'] = repr(self.char)
228+
if not getattr(self, 'send_event', True):
229+
del state['send_event']
230+
if self.state == 0:
231+
del state['state']
232+
if self.delta == 0:
233+
del state['delta']
234+
# widget usually is known
235+
# serial and time are not very interesing
236+
# keysym_num duplicates keysym
237+
# x_root and y_root mostly duplicate x and y
238+
keys = ('send_event',
239+
'state', 'keycode', 'char', 'keysym',
240+
'num', 'delta', 'focus',
241+
'x', 'y', 'width', 'height')
242+
return '<%s event%s>' % (
243+
self.type,
244+
''.join(' %s=%s' % (k, state[k]) for k in keys if k in state)
245+
)
178246

179247
_support_default_root = 1
180248
_default_root = None
@@ -1271,7 +1339,10 @@ def getint_event(s):
12711339
except TclError: pass
12721340
e.keysym = K
12731341
e.keysym_num = getint_event(N)
1274-
e.type = T
1342+
try:
1343+
e.type = EventType(T)
1344+
except ValueError:
1345+
e.type = T
12751346
try:
12761347
e.widget = self._nametowidget(W)
12771348
except KeyError:

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ Core and Builtins
3838
Library
3939
-------
4040

41+
- Issue #27294: Improved repr for Tkinter event objects.
42+
4143
- Issue #20508: Improve exception message of IPv{4,6}Network.__getitem__.
4244
Patch by Gareth Rees.
4345

0 commit comments

Comments
 (0)