From 9c6c3fb4350cdf8064a4c90b84080e6a10adb65b Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 18 Jun 2016 21:55:26 +0300 Subject: [PATCH] Issue #27294: Numerical state in the repr for Tkinter event objects is now represented as a compination of known flags. --- Lib/tkinter/__init__.py | 29 +++++++++++++++++++++-------- Misc/NEWS | 3 +++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index c687da580c..aaa7d14a87 100644 --- 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 != '??'} + 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 diff --git a/Misc/NEWS b/Misc/NEWS index bb1675cc9e..63e87b21d8 100644 --- 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 + represented as a compination of known flags. + - Issue #27177: Match objects in the re module now support index-like objects as group indices. Based on patches by Jeroen Demeyer and Xiang Zhang. -- 2.40.0