diff -r 304c61263ae6 Lib/tkinter/__init__.py --- a/Lib/tkinter/__init__.py Mon Jun 13 09:24:11 2016 +0300 +++ b/Lib/tkinter/__init__.py Mon Jun 13 10:51:44 2016 +0300 @@ -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 != '??'} + attrs = {k: v for k, v in self.__dict__.items() if v != '??'} if not self.char: - del state['char'] + del attrs['char'] elif self.char != '??': - state['char'] = repr(self.char) + attrs['char'] = repr(self.char) if not getattr(self, 'send_event', True): - del state['send_event'] + del attrs['send_event'] if self.state == 0: - del state['state'] + del attrs['state'] + elif isinstance(self.state, int): + state = self.state + mods = ('Shift', 'Lock', 'Control', + 'Mod1', 'Mod2', 'Mod3', 'Mod4', 'Mod5', + 'Button1', 'Button2', 'Button3', 'Button4', 'Button5') + s = [] + for i, n in enumerate(mods): + if state & (1 << i): + s.append(n) + state = state & ~((1<< len(mods)) - 1) + if state or not s: + s.append(hex(state)) + attrs['state'] = '|'.join(s) if self.delta == 0: - del state['delta'] + del attrs['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', + 'state', 'keysym', 'keycode', 'char', '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) + ''.join(' %s=%s' % (k, attrs[k]) for k in keys if k in attrs) ) _support_default_root = 1