gpt4 book ai didi

python - Tkinter 和 32 位 Unicode 复制 - 任何修复?

转载 作者:行者123 更新时间:2023-12-03 14:14:24 25 4
gpt4 key购买 nike

我只想显示 Chip,但我同时得到 Chip 戴尔。
我输入哪个 32 位字符似乎无关紧要,tkinter 似乎复制了它们 - 不仅仅是花栗鼠 .
我在想我可能必须将它们渲染为 png,然后将它们作为图像放置,但这似乎有点......笨手笨脚。
还有其他解决方案吗? tkinter 是否计划解决这个问题?

import tkinter as tk

# Python 3.8.3
class Application(tk.Frame):
def __init__(self, master=None):
self.canvas = None
self.quit_button = None
tk.Frame.__init__(self, master)
self.grid()
self.create_widgets()

def create_widgets(self):
self.canvas = tk.Canvas(self, width=500, height=420, bg='yellow')
self.canvas.create_text(250, 200, font="* 180", text='\U0001F43F')
self.canvas.grid()

self.quit_button = tk.Button(self, text='Quit', command=self.quit)
self.quit_button.grid()

app = Application()
app.master.title('Emoji')
app.mainloop()
Chip and Dale on Mac OS
  • 显然这在 Windows 上运行良好 - 所以也许这是一个 MacOS 问题。
  • 我已经在两台独立的 Mac 上运行了它——它们都在最新的操作系统上运行 卡特琳娜 10.15.5 - 并且都显示了问题
  • 该错误与来自 python.org 的标准 Python 安装程序一起显示 - Python 3.8.3 with Tcl/Tk 8.6.8
  • 据说它可能会用 Tcl/Tk 8.6.10 修复 - 但我真的不知道如何使用普通安装程序升级 Tcl/Tk。
  • 这也被报告为错误 cf。 https://bugs.python.org/issue41212

  • 一位 Python 贡献者认为 TCL/Tk 不能/不会支持可变宽度编码(它总是在内部转换固定宽度编码),这向我表明 Tcl/Tk 不适合一般的 UTF-8 开发。

    最佳答案

    根本问题是 Tcl 和 Tk 对非 BMP(Unicode 基本多语言平面)字符不太满意。在 8.6.10 之前,会发生什么是任何人的猜测;实现只是假设这样的字符不存在,并且在它们实际出现时被认为是有问题的(在这方面的各个方面都有几张票)。 8.7 将有更强大的修复(有关详细信息,请参阅 TIP #389)——基本目标是,如果您输入非 BMP 字符,它们可以在另一侧取出,以便将它们写入 UTF-8如果字体引擎设计支持它们,文件或由 Tk 显示 - 但某些操作仍然会出错,因为字符串实现仍将使用代理。 9.0 将正确解决问题(通过将基本字符存储单元更改为足够大以容纳任何 Unicode 代码点),但这是一个破坏性更改。
    对于已发布的版本,如果您可以从 Python 到 Tcl 的整个过程中获得代理,那么它们可能最终会出现在可能会做正确事情的 GUI 引擎中。在某些情况下(不包括我目前拥有的任何构建,FWIW,但我有奇怪的构建,所以不要过多阅读)。使用 8.7,通过 UTF-8 发送将能够工作;这是将得到保证的功能配置文件的一部分。 (编码函数存在于旧版本中,但在 8.6 版本中,它们会在非 BMP UTF-8 上做错误的事情,并且在旧版本中会奇怪地中断。)

    关于python - Tkinter 和 32 位 Unicode 复制 - 任何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62713741/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com