繁体   English   中英

当用户在 Tkinter 条目小部件中输入表情符号时,在条目上调用 .get 时会抛出异常

[英]When a user enters an emoji into the Tkinter entry widget, an exception is thrown when .get is called on the entry

正如我从 StackOverflow 上的其他问题中发现的那样(请参阅此处),在将 Unicode 用于表情符号时,Tkinter 中存在一个错误。

我已经实现了修复 Unicode 显示的功能,因此我可以使用 Tkinter 很好地显示表情符号。 但是,当我尝试从包含无法解码 utf-8 字符串的表情符号的条目(文本框)小部件获取文本时,Tkinter 仍会引发异常。

我怀疑我可能能够使用tk.call直接访问底层 Tcl 解释器来解决这个问题,因为另一个问题让我认为这个错误是在 Tkinter 而不是 Tcl 中。 我不知道是否有任何 Tcl 未能找到有关如何使用tk.call任何文档......我是走在正确的道路上还是有更好的解决方案?

这是崩溃的堆栈跟踪:


Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files (x86)\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/phili/PycharmProjects/pychat\gui.py", line 61, in __send
    self.add_message('You: ' + replace_emoji(self.__msg_entry.get()))
  File "C:\Program Files (x86)\Python37-32\lib\tkinter\__init__.py", line 2682, in get
    return self.tk.call(self._w, 'get')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 0: invalid continuation byte

这是一个长期存在的已知错误(它很难修复,因为它以微妙的方式打破了一堆假设),并且是由仅支持 Unicode 的基本多语言平面的底层库(Tcl 和 Tk)引起的。表情符号没有打开)。 我们希望在 Tk 8.7 发布后有一个解决方法。

Tkinter 本身也可能存在加剧这种情况的问题。


我已经对此进行了更多研究,可以看出它确实适用于 8.7 我不是 100% 确定它是否存在于 Tk 中(分支时间线表明可能不存在),但这不是 API 更改,因此应该不难; 那里有一些警告,但我相信它会在 8.7 中完全排序。

8.6 在这方面也取得了 一些进展 但是,它对 Tcl 使用非标准构建模式(定义TCL_UTF_MAX=4 ),因此它不太可能在 8.6 中普遍用于 Tkinter,而在 8.7 中,Tkinter 构建在它之上是实用的(以及错误将成为他们的问题)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM