Skip to content

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

Closed

Description

@culler
mannequin
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']

Activity

  1. culler commented on Dec 18, 2010

    cullermannequin
    MannequinAuthor

    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

  2. added
    type-bugAn unexpected behavior, bug, or error
    and removed
    type-crashA hard crash of the interpreter, possibly with a core dump
    on Dec 18, 2010
  3. ronaldoussoren commented on Jul 19, 2011

    @ronaldoussoren
    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)

  4. culler commented on Jul 24, 2011

    cullermannequin
    MannequinAuthor

    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.

  5. ned-deily commented on Apr 21, 2012

    @ned-deily
    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.

  6. ned-deily commented on Apr 22, 2012

    @ned-deily
    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

  7. ned-deily commented on Apr 22, 2012

    @ned-deily
    Member
  8. wordtech commented on Apr 22, 2012

    wordtechmannequin
    Mannequin

    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.

  9. ned-deily commented on Apr 23, 2012

    @ned-deily
    Member

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

  10. ned-deily commented on Aug 2, 2012

    @ned-deily
    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.

  11. MarcCuller commented on Aug 2, 2012

    MarcCullermannequin
    Mannequin

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

  12. DougalGraham commented on May 23, 2014

    DougalGrahammannequin
    Mannequin

    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.

  13. DougalGraham commented on May 23, 2014

    DougalGrahammannequin
    Mannequin

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

  14. transferred this issue fromon Apr 10, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions