From 043bbc7da387f613f3ce60c20063e2a29baff372 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sat, 29 Mar 2003 09:47:21 +0000 Subject: Patch #707701: Expect '??' in event fields. Fixes #698517. Will backport to 2.2. --- Lib/lib-tk/Tkinter.py | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py index bd80c3b..6db671a 100644 --- a/Lib/lib-tk/Tkinter.py +++ b/Lib/lib-tk/Tkinter.py @@ -1035,38 +1035,54 @@ class Misc: """Internal function.""" if len(args) != len(self._subst_format): return args getboolean = self.tk.getboolean + getint = int + def getint_event(s): + """Tk changed behavior in 8.4.2, returning "??" rather more often.""" + try: + return int(s) + except ValueError: + return s + nsign, b, f, h, k, s, t, w, x, y, A, E, K, N, W, T, X, Y, D = args # Missing: (a, c, d, m, o, v, B, R) e = Event() + # serial field: valid vor all events + # number of button: ButtonPress and ButtonRelease events only + # height field: Configure, ConfigureRequest, Create, + # ResizeRequest, and Expose events only + # keycode field: KeyPress and KeyRelease events only + # time field: "valid for events that contain a time field" + # width field: Configure, ConfigureRequest, Create, ResizeRequest, + # and Expose events only + # x field: "valid for events that contain a x field" + # y field: "valid for events that contain a y field" + # keysym as decimal: KeyPress and KeyRelease events only + # x_root, y_root fields: ButtonPress, ButtonRelease, KeyPress, + # KeyRelease,and Motion events e.serial = getint(nsign) - e.num = getint(b) + e.num = getint_event(b) try: e.focus = getboolean(f) except TclError: pass - e.height = getint(h) - e.keycode = getint(k) - # For Visibility events, event state is a string and - # not an integer: - try: - e.state = getint(s) - except ValueError: - e.state = s - e.time = getint(t) - e.width = getint(w) - e.x = getint(x) - e.y = getint(y) + e.height = getint_event(h) + e.keycode = getint_event(k) + e.state = getint_event(s) + e.time = getint_event(t) + e.width = getint_event(w) + e.x = getint_event(x) + e.y = getint_event(y) e.char = A try: e.send_event = getboolean(E) except TclError: pass e.keysym = K - e.keysym_num = getint(N) + e.keysym_num = getint_event(N) e.type = T try: e.widget = self._nametowidget(W) except KeyError: e.widget = W - e.x_root = getint(X) - e.y_root = getint(Y) + e.x_root = getint_event(X) + e.y_root = getint_event(Y) try: e.delta = getint(D) except ValueError: -- cgit v0.12