Issue #27294: Improved repr for Tkinter event objects.
This commit is contained in:
parent
f0d4621aa2
commit
d611f4cf10
|
@ -30,6 +30,7 @@ button.pack(side=BOTTOM)
|
||||||
tk.mainloop()
|
tk.mainloop()
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import enum
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import _tkinter # If this fails your Python may not be configured for Tk
|
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):
|
||||||
dict[key] = value
|
dict[key] = value
|
||||||
return dict
|
return dict
|
||||||
|
|
||||||
|
|
||||||
|
class EventType(str, enum.Enum):
|
||||||
|
KeyPress = '2'
|
||||||
|
Key = KeyPress,
|
||||||
|
KeyRelease = '3'
|
||||||
|
ButtonPress = '4'
|
||||||
|
Button = ButtonPress,
|
||||||
|
ButtonRelease = '5'
|
||||||
|
Motion = '6'
|
||||||
|
Enter = '7'
|
||||||
|
Leave = '8'
|
||||||
|
FocusIn = '9'
|
||||||
|
FocusOut = '10'
|
||||||
|
Keymap = '11' # undocumented
|
||||||
|
Expose = '12'
|
||||||
|
GraphicsExpose = '13' # undocumented
|
||||||
|
NoExpose = '14' # undocumented
|
||||||
|
Visibility = '15'
|
||||||
|
Create = '16'
|
||||||
|
Destroy = '17'
|
||||||
|
Unmap = '18'
|
||||||
|
Map = '19'
|
||||||
|
MapRequest = '20'
|
||||||
|
Reparent = '21'
|
||||||
|
Configure = '22'
|
||||||
|
ConfigureRequest = '23'
|
||||||
|
Gravity = '24'
|
||||||
|
ResizeRequest = '25'
|
||||||
|
Circulate = '26'
|
||||||
|
CirculateRequest = '27'
|
||||||
|
Property = '28'
|
||||||
|
SelectionClear = '29' # undocumented
|
||||||
|
SelectionRequest = '30' # undocumented
|
||||||
|
Selection = '31' # undocumented
|
||||||
|
Colormap = '32'
|
||||||
|
ClientMessage = '33' # undocumented
|
||||||
|
Mapping = '34' # undocumented
|
||||||
|
VirtualEvent = '35', # undocumented
|
||||||
|
Activate = '36',
|
||||||
|
Deactivate = '37',
|
||||||
|
MouseWheel = '38',
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
class Event:
|
class Event:
|
||||||
"""Container for the properties of an event.
|
"""Container for the properties of an event.
|
||||||
|
|
||||||
|
@ -174,7 +219,30 @@ class Event:
|
||||||
widget - widget in which the event occurred
|
widget - widget in which the event occurred
|
||||||
delta - delta of wheel movement (MouseWheel)
|
delta - delta of wheel movement (MouseWheel)
|
||||||
"""
|
"""
|
||||||
pass
|
def __repr__(self):
|
||||||
|
state = {k: v for k, v in self.__dict__.items() if v != '??'}
|
||||||
|
if not self.char:
|
||||||
|
del state['char']
|
||||||
|
elif self.char != '??':
|
||||||
|
state['char'] = repr(self.char)
|
||||||
|
if not getattr(self, 'send_event', True):
|
||||||
|
del state['send_event']
|
||||||
|
if self.state == 0:
|
||||||
|
del state['state']
|
||||||
|
if self.delta == 0:
|
||||||
|
del state['delta']
|
||||||
|
# widget usually is known
|
||||||
|
# serial and time are not very interesing
|
||||||
|
# keysym_num duplicates keysym
|
||||||
|
# x_root and y_root mostly duplicate x and y
|
||||||
|
keys = ('send_event',
|
||||||
|
'state', 'keycode', 'char', 'keysym',
|
||||||
|
'num', 'delta', 'focus',
|
||||||
|
'x', 'y', 'width', 'height')
|
||||||
|
return '<%s event%s>' % (
|
||||||
|
self.type,
|
||||||
|
''.join(' %s=%s' % (k, state[k]) for k in keys if k in state)
|
||||||
|
)
|
||||||
|
|
||||||
_support_default_root = 1
|
_support_default_root = 1
|
||||||
_default_root = None
|
_default_root = None
|
||||||
|
@ -1271,7 +1339,10 @@ class Misc:
|
||||||
except TclError: pass
|
except TclError: pass
|
||||||
e.keysym = K
|
e.keysym = K
|
||||||
e.keysym_num = getint_event(N)
|
e.keysym_num = getint_event(N)
|
||||||
e.type = T
|
try:
|
||||||
|
e.type = EventType(T)
|
||||||
|
except ValueError:
|
||||||
|
e.type = T
|
||||||
try:
|
try:
|
||||||
e.widget = self._nametowidget(W)
|
e.widget = self._nametowidget(W)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|
|
@ -38,6 +38,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #27294: Improved repr for Tkinter event objects.
|
||||||
|
|
||||||
- Issue #20508: Improve exception message of IPv{4,6}Network.__getitem__.
|
- Issue #20508: Improve exception message of IPv{4,6}Network.__getitem__.
|
||||||
Patch by Gareth Rees.
|
Patch by Gareth Rees.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue