cpython: e0ec4abe659f (original) (raw)
--- a/Lib/tkinter/init.py +++ b/Lib/tkinter/init.py @@ -220,28 +220,41 @@ class Event: delta - delta of wheel movement (MouseWheel) """ def repr(self):
state = {k: v for k, v in self.__dict__.items() if v != '??'}[](#l1.7)
attrs = {k: v for k, v in self.__dict__.items() if v != '??'}[](#l1.8) if not self.char:[](#l1.9)
del state['char'][](#l1.10)
del attrs['char'][](#l1.11) elif self.char != '??':[](#l1.12)
state['char'] = repr(self.char)[](#l1.13)
attrs['char'] = repr(self.char)[](#l1.14) if not getattr(self, 'send_event', True):[](#l1.15)
del state['send_event'][](#l1.16)
del attrs['send_event'][](#l1.17) if self.state == 0:[](#l1.18)
del state['state'][](#l1.19)
del attrs['state'][](#l1.20)
elif isinstance(self.state, int):[](#l1.21)
state = self.state[](#l1.22)
mods = ('Shift', 'Lock', 'Control',[](#l1.23)
'Mod1', 'Mod2', 'Mod3', 'Mod4', 'Mod5',[](#l1.24)
'Button1', 'Button2', 'Button3', 'Button4', 'Button5')[](#l1.25)
s = [][](#l1.26)
for i, n in enumerate(mods):[](#l1.27)
if state & (1 << i):[](#l1.28)
s.append(n)[](#l1.29)
state = state & ~((1<< len(mods)) - 1)[](#l1.30)
if state or not s:[](#l1.31)
s.append(hex(state))[](#l1.32)
attrs['state'] = '|'.join(s)[](#l1.33) if self.delta == 0:[](#l1.34)
del state['delta'][](#l1.35)
del attrs['delta'][](#l1.36) # widget usually is known[](#l1.37) # serial and time are not very interesing[](#l1.38) # keysym_num duplicates keysym[](#l1.39) # x_root and y_root mostly duplicate x and y[](#l1.40) keys = ('send_event',[](#l1.41)
'state', 'keycode', 'char', 'keysym',[](#l1.42)
'state', 'keysym', 'keycode', 'char',[](#l1.43) 'num', 'delta', 'focus',[](#l1.44) 'x', 'y', 'width', 'height')[](#l1.45) return '<%s event%s>' % ([](#l1.46) self.type,[](#l1.47)
''.join(' %s=%s' % (k, state[k]) for k in keys if k in state)[](#l1.48)
''.join(' %s=%s' % (k, attrs[k]) for k in keys if k in attrs)[](#l1.49) )[](#l1.50)
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 3.6.0 alpha 3 Library ------- +- Issue #27294: Numerical state in the repr for Tkinter event objects is now