Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UnicodeDecodeError in OS X tkinter when binding to <MouseWheel> #54940

Closed
culler mannequin opened this issue Dec 18, 2010 · 12 comments
Closed

UnicodeDecodeError in OS X tkinter when binding to <MouseWheel> #54940

culler mannequin opened this issue Dec 18, 2010 · 12 comments
Assignees
Labels
OS-mac topic-tkinter type-bug An unexpected behavior, bug, or error

Comments

@culler
Copy link
Mannequin

culler mannequin commented Dec 18, 2010

BPO 10731
Nosy @ronaldoussoren, @ned-deily

Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

Show more details

GitHub fields:

assignee = 'https://github.com/ned-deily'
closed_at = <Date 2012-08-02.07:58:12.508>
created_at = <Date 2010-12-18.15:22:39.788>
labels = ['OS-mac', 'type-bug', 'expert-tkinter']
title = 'UnicodeDecodeError in OS X tkinter when binding to <MouseWheel>'
updated_at = <Date 2014-05-23.03:55:54.555>
user = 'https://bugs.python.org/culler'

bugs.python.org fields:

activity = <Date 2014-05-23.03:55:54.555>
actor = 'Dougal.Graham'
assignee = 'ned.deily'
closed = True
closed_date = <Date 2012-08-02.07:58:12.508>
closer = 'ned.deily'
components = ['macOS', 'Tkinter']
creation = <Date 2010-12-18.15:22:39.788>
creator = 'culler'
dependencies = []
files = []
hgrepos = []
issue_num = 10731
keywords = []
message_count = 12.0
messages = ['124287', '140666', '141052', '158936', '158946', '158947', '158966', '159050', '167198', '167242', '218941', '218943']
nosy_count = 6.0
nosy_names = ['ronaldoussoren', 'wordtech', 'ned.deily', 'culler', 'Marc.Culler', 'Dougal.Graham']
pr_nums = []
priority = 'normal'
resolution = 'out of date'
stage = 'resolved'
status = 'closed'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue10731'
versions = ['Python 3.2', 'Python 3.3']

@culler
Copy link
Mannequin Author

culler mannequin commented Dec 18, 2010

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

@culler culler mannequin added topic-tkinter type-crash A hard crash of the interpreter, possibly with a core dump labels Dec 18, 2010
@bitdancer bitdancer added type-bug An unexpected behavior, bug, or error and removed type-crash A hard crash of the interpreter, possibly with a core dump labels Dec 18, 2010
@ronaldoussoren
Copy link
Contributor

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)

@culler
Copy link
Mannequin Author

culler mannequin commented Jul 24, 2011

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.

@ned-deily
Copy link
Member

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.

@ned-deily
Copy link
Member

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

@ned-deily
Copy link
Member

@wordtech
Copy link
Mannequin

wordtech mannequin commented Apr 22, 2012

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.

@ned-deily
Copy link
Member

A potential fix has been generated for Tk. I'll close this issue once the fix has been verified with _tkinter.

@ned-deily
Copy link
Member

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.

@MarcCuller
Copy link
Mannequin

MarcCuller mannequin commented Aug 2, 2012

Thanks, Ned! It seems to be completely fixed by 8.5.12.

@DougalGraham
Copy link
Mannequin

DougalGraham mannequin commented May 23, 2014

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.

@DougalGraham
Copy link
Mannequin

DougalGraham mannequin commented May 23, 2014

I have resolved this by using the official Python distribution, rather than Homebrew's.

@ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
OS-mac topic-tkinter type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

No branches or pull requests

3 participants