classification
Title: UnicodeDecodeError in OS X tkinter when binding to
Type: behavior Stage: resolved
Components: macOS, Tkinter Versions: Python 3.2, Python 3.3
process
Status: closed Resolution: out of date
Dependencies: Superseder:
Assigned To: ned.deily Nosy List: Dougal.Graham, Marc.Culler, culler, ned.deily, ronaldoussoren, wordtech
Priority: normal Keywords:

Created on 2010-12-18 15:22 by culler, last changed 2014-05-23 03:55 by Dougal.Graham. This issue is now closed.

Messages (12)
msg124287 - (view) Author: Marc Culler (culler) * Date: 2010-12-18 15:22
In OS X tkinter the "two-finger scroll" generates <MouseWheel> events.

The following code:

#### bug.py
import tkinter

def mouse_wheel(event):
    print('Mouse wheel event')

tk = tkinter.Tk()
list = tkinter.Listbox(tk)
list.bind('<MouseWheel>', mouse_wheel)
for n in range(20):
    list.insert(tkinter.END, str(n**n))
list.pack(fill=tkinter.BOTH, expand=1)
tk.mainloop()
####

often throws a UnicodeDecodeError exception with a traceback like the one shown below when you do a "two-finger scroll" in the window.

Traceback (most recent call last):
  File "bug.py", line 12, in <module>
    tk.mainloop()
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinter/__init__.py", line 1009, in mainloop
    self.tk.mainloop(n)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x84 in position 1: unexpected code byte

The value of the byte changes from time to time, and sometimes it may be possible to scroll a few times without producing the error.

This problem did not occur on my Mandriva 2010.2 system.  I think it is specific to the Macintosh.  It might possibly be related to:
http://bugs.python.org/issue834351
msg140666 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2011-07-19 13:33
This is almost certainly a bug in Tk.  What OSX version are you using, and which python installer did you use?

One thing you could try is installing a matching copy of ActiveState's Tk (8.4 for the 32-bit build, 8.5 for intel-only builds of python 2.7 and 3.2)
msg141052 - (view) Author: Marc Culler (culler) * Date: 2011-07-24 18:55
I am running OSX 10.5.8 on this macbook.  The Tcl/Tk package on the system is ActiveState Tcl/Tk 8.4.19.

I just installed Python 3.2 (r32:88452, Feb 20 2011, 10:19:59) from http://www.python.org/getit/releases/3.2/ and I am still seeing this bug.  It does not occur with the Python 2.7 Tkinter package, which uses the same Tcl/Tk framework.  So if it is a bug in Tk, it is harmless when used with Python 2.7.  But, after all, it is not so surprising to see new UnicodeDecodeErrors when porting from Python 2 to Python 3.
msg158936 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2012-04-21 23:36
The exception also occurs with Python 3.3 linked with Cocoa Tk 8.5.  However, the it does not appear when Python 3.x is linked with Carbon Tk 8.4.
msg158946 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2012-04-22 04:40
It looks like the problem is that the current Cocoa Tcl/Tk 8.5.x returns an incorrect MouseWheel event.  Using the supplied test program and breakpointing in PythonCmd (around Modules/_tkinter.c:2027 in default), I found that it is being called from Tcl for MouseWheel events with an "argc" of 20, which looks suspiciously like the length of argv[1], "4302153816mouse_wheel", rather than the number of arguments which should be more like 3.  It may also be an issue that affects Python because _tkinter still uses the older Tcl_CreateCommand interface rather than the newer Tcl_CreateObjCommand.  The same Tcl behavior is observed with Python 2.7 _tkinter.c but there the bogus arguments are translated using PyString_FromString which is unaffected by the garbage arguments.  It might be possible to workaround this problem in _tkinter but the next step is to open a Tcl/Tk issue against the Cocoa implementation and push for a proper fix there.

http://www.tcl.tk/man/tcl8.5/TclLib/CrtCommand.htm
msg158947 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2012-04-22 04:56
I've opened Tk Toolkit bug 3520202:
https://sourceforge.net/tracker/?func=detail&aid=3520202&group_id=12997&atid=112997
msg158966 - (view) Author: Kevin Walzer (wordtech) * Date: 2012-04-22 15:09
I've added some comments to this on the Tkinter-dev mailing list, but to summarize, the bug is not reproducible on the Tcl side of the bridge, and so I am not clear what changes can be made in Tk's internals. It might e better to proceed with implementing a fix in Tkinter because the bug seems to occur at the level of Tkinter/Tk interaction.
msg159050 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2012-04-23 17:34
A potential fix has been generated for Tk.  I'll close this issue once the fix has been verified with _tkinter.
msg167198 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2012-08-02 07:58
Tcl/Tk 8.5.12 has now been released.  After installing ActiveTcl 8.5.12 for OS X, your 3.2 test case that previously readily failed for me no longer does.  So I hope you also find that the problem is now resolved.
msg167242 - (view) Author: Marc Culler (Marc.Culler) * Date: 2012-08-02 17:23
Thanks, Ned!  It seems to be completely fixed by 8.5.12.
msg218941 - (view) Author: Dougal Graham (Dougal.Graham) Date: 2014-05-23 03:24
I recenly encuntered this error in OSX 10.9.2, using pthon 3.3 and 3.4 from Homebrew. I tried installing activetcl 8.6 package, but it still fails dependably.
msg218943 - (view) Author: Dougal Graham (Dougal.Graham) Date: 2014-05-23 03:55
I have resolved this by using the official Python distribution, rather than Homebrew's.
History
Date User Action Args
2014-05-23 03:55:54Dougal.Grahamsetmessages: + msg218943
2014-05-23 03:24:28Dougal.Grahamsetnosy: + Dougal.Graham
messages: + msg218941
2012-08-02 17:23:01Marc.Cullersetnosy: + Marc.Culler
messages: + msg167242
2012-08-02 07:58:12ned.deilysetstatus: pending -> closed

messages: + msg167198
stage: resolved
2012-04-23 17:34:49ned.deilysetstatus: open -> pending
resolution: out of date
messages: + msg159050

stage: needs patch -> (no value)
2012-04-22 15:09:33wordtechsetnosy: + wordtech
messages: + msg158966
2012-04-22 04:56:23ned.deilysetmessages: + msg158947
2012-04-22 04:40:46ned.deilysetassignee: ronaldoussoren -> ned.deily
messages: + msg158946
2012-04-21 23:36:29ned.deilysetstage: needs patch
messages: + msg158936
components: + Tkinter
versions: + Python 3.3
2011-07-24 18:55:38cullersetmessages: + msg141052
versions: + Python 3.2, - Python 3.1
2011-07-19 13:33:39ronaldoussorensetmessages: + msg140666
2010-12-18 17:09:45r.david.murraysetnosy: ronaldoussoren, ned.deily, culler
type: crash -> behavior
2010-12-18 17:09:31r.david.murraysetnosy: + ronaldoussoren, ned.deily

components: + macOS, - Tkinter
assignee: ronaldoussoren
2010-12-18 15:22:39cullercreate