Kon*_*hog 7 python unicode tkinter tcl emoji
我只想展示 Chip,但我同时得到 Chip和Dale。我输入哪个 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()
Run Code Online (Sandbox Code Playgroud)
一位 Python 贡献者认为 TCL/Tk 不能/不会支持可变宽度编码(它总是在内部转换固定宽度编码),这向我表明 Tcl/Tk 不适合一般的 UTF-8 开发。
根本问题是 Tcl 和 Tk 对非 BMP(Unicode 基本多语言平面)字符不太满意。在 8.6.10 之前,会发生什么是任何人的猜测;实现只是假设这样的字符不存在,并且在它们实际出现时被认为是有问题的(在这方面的各个方面都有几张票)。8.7 将有更强大的修复(见提示 #389有关详细信息)-基本目标是,如果您输入非 BMP 字符,它们可以在另一侧取出,以便将它们写入 UTF-8 文件或由 Tk 显示(如果字体引擎设计支持)他们 - 但一些操作仍然是错误的,因为字符串实现仍然会使用代理。9.0 将正确解决问题(通过将基本字符存储单元更改为足够大以容纳任何 Unicode 代码点),但这是一个破坏性更改。
对于已发布的版本,如果您可以将代理从 Python 翻墙到 Tcl,那么它们可能最终会出现在可能会做正确事情的 GUI 引擎中。在某些情况下(不包括我目前拥有的任何构建,FWIW,但我有奇怪的构建,所以不要过多阅读)。使用 8.7,通过 UTF-8 发送将能够工作;这是将得到保证的功能配置文件的一部分。(编码函数存在于旧版本中,但在 8.6 版本中,它们会在非 BMP UTF-8 上做错误的事情,并且在旧版本中会奇怪地中断。)
归档时间: |
|
查看次数: |
522 次 |
最近记录: |