tkinter 中的 Python 3 unicode 编解码器错误绑定鼠标滚轮

Posted

技术标签:

【中文标题】tkinter 中的 Python 3 unicode 编解码器错误绑定鼠标滚轮【英文标题】:Python 3 unicode codec error binding mousewheel in tkinter 【发布时间】:2018-06-13 14:27:30 【问题描述】:

在 MacOS 上使用 Python 3.6/tkinter,我在画布内创建了一个框架并将滚动条绑定到它。这一切都很好。问题是当光标位于可滚动框架中时,我尝试捕捉 MouseWheel 事件。我设置了一个绑定:

main_window.bind("<MouseWheel>",on_mousewheel)

并创建了一个简短的虚拟事件处理程序:

def on_mousewheel(event):
    print(event.delta)

每次我使用滚轮时,Python 都会响应:

Traceback (most recent call last):
  File "/Users/Gary/IPPS/opendb.py", line 160, in <module>
    main_window.mainloop()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1277, in mainloop
    self.tk.mainloop(n)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

代码如下:

from tkinter import *

def on_main_window_resize(event):
    canvas.configure(scrollregion=canvas.bbox('all'))

def on_mousewheel(event):
    print(event.delta)

main_window = Tk()
main_window.bind("<MouseWheel>",on_mousewheel)
canvas = Canvas(main_window, width=500, height=500)
canvas.pack(side=LEFT, fill=BOTH, expand=YES)
cust_scroll = Scrollbar(main_window, orient=VERTICAL, command=canvas.yview)
cust_scroll.pack(side=RIGHT, fill=Y, expand=NO)
cust_list = Frame(canvas)
canvas['yscrollcommand'] = cust_scroll.set
canvas.bind('<Configure>', on_main_window_resize)
canvas.create_window((0,0), window=cust_list, anchor=NW)
main_window.grid_columnconfigure(0, weight=1)
main_window.grid_rowconfigure(0, weight=1)

memberbuttons = list();
for member in range(1,20):
    memberbutton = Button(cust_list, text="BUTTON", justify=LEFT, pady=2)
    memberbutton.pack(side=TOP, fill=X)
main_window.mainloop()

有什么想法吗?

【问题讨论】:

请提供a Minimal, Complete, and Verifiable example。在当前状态下,您提供的代码不完整,无法重现该错误。 我已经添加了代码,@Nae。对此感到抱歉。 我仍然无法重现相同的错误。只有那个鼠标滚轮没有任何错误。 添加return "break" 不会改变任何东西。但奇怪的是,如果我添加return "break" 并删除print(event.delta),那么我第一次尝试向下滚动时会收到Unicode 错误,但直到我第二次尝试向上滚动时才会出现。这让我很困惑。 我偶然遇到了同样的错误,我也可以使用提供的代码重现错误。 macOS 10.13.4 上的 Python 3.6.5。似乎是 tkinter 库中的一个错误。 【参考方案1】:

我在网上找到了一些有用的参考资料来解决这个问题,它似乎发生在旧版本的 ActiveTcl (8.5.x) 上。

Inertial scrolling in Mac OS X with Tkinter and Python

nltk/nltk on Github - OS X: downloader GUI crashes in Python 3 when mouse wheel is used for scrolling

解决方案是将您的 ActiveTlc 版本升级&gt;=8.6,您可以通过两种方式做到这一点:

手动 通过Python Release 3.7.1上的二进制包安装最新版本的Python 3.7.1

【讨论】:

以上是关于tkinter 中的 Python 3 unicode 编解码器错误绑定鼠标滚轮的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 3.8 中的按钮读取 Tkinter 中的条目

tkinter 中的 Python 3 unicode 编解码器错误绑定鼠标滚轮

如何在python 3.4.x中的tkinter文本小部件中显示渲染的html内容

python tkinter treeview右键单击(Button-3)事件以选择树视图中的项目

如何使用 python 3 和 tkinter 模块从右到左对齐菜单栏中的项目?

python unico - 独一无二