Tkinter在Manjaro中无法正确显示Unicode字符

2 投票
3 回答
2304 浏览
提问于 2025-04-16 12:49

Python和Tkinter可以正确处理Unicode字符。

但是它们无法正确显示Unicode编码的字符。

我在Ubuntu上使用Python 3.1和Tkinter,想使用泰米尔语的Unicode字符。

所有的处理都没问题,但显示却不对?

这是在Tkinter中显示错误的样子

wrong

这是正确的显示(在gedit中)

correct


问题仍未解决:

from tkinter import *
root = Tk()
root.geometry('200x200')
var = StringVar()
label = Label( root, textvariable=var, relief=RAISED )
Entry(text="Placeholder text").pack()
var.set("கற்றதனால் ஆய பயனென்கொல் வாலறிவன்\nநற்றாள்தொழாஅர் எனின்.  ")
label.pack()
root.mainloop()

Manjaro系统:

enter image description here

Windows系统:

enter image description here

3 个回答

-1

看起来Tk在处理一些特殊字符,比如“类零组合标记”时出现了问题,具体可以参考这个链接:http://www.unicode.org/versions/Unicode6.0.0/ch04.pdf#G124820(表4-4)。

我猜其中一个显示不正确的字符序列是:0BA9和0BC6(泰米尔音节NNNE),其中0BC6根据Unicode标准是一个重新排序的类零组合标记,这基本上意味着这些字符的显示顺序被调换了。

解决这个问题的唯一办法就是在Tk的错误追踪系统上提交一个bug报告,希望能得到修复。

0

根据这个评论

from PyQt5.QtWidgets import QApplication,QMainWindow,QLabel
import sys
app=QApplication(sys.argv)
app.setStyle('Fusion')
app.setApplicationName('PyQt5 App')
win=QMainWindow()
label=QLabel()
text='கற்றதனால் ஆய பயனென்கொல் வாலறிவன்\nநற்றாள் தொழாஅர் எனின்.'
label.setText(text)
win.setCentralWidget(label)
win.show()
sys.exit(app.exec_())

在这里输入图片描述

0

我之前也遇到过类似的问题,后来发现我用了一个叫做“零宽连接符”(U+200D)的东西,专门告诉显示引擎把两个字符连在一起。这个方法在2010年是有效的,但现在看来显示引擎发生了一些变化(我现在才知道),所以到了2011年,我发现使用这个连接符反而出问题了!这导致我原本能正常工作的代码坏掉了。我不得不把这些零宽连接符去掉,代码才又能正常工作。希望这对你有帮助。

撰写回答