Unicode在tkinter中显示不正确

时间:2019-12-28 15:35:26

标签: python python-3.x tkinter unicode

我正在尝试在tkinter GUI中显示印度语言。我正在使用Python 3,而tkinter的版本是8.6。
在我的代码中,python似乎正确处理了这些语言,因为当我打印它们时,字体和字符序列是正确的。但是,当我在tkinter GUI上显示文本(标签,文本或画布)时,它们变得混乱不清或处理不正确。
字体似乎不是问题,因为正确选择了语言本身并且许多字母都是正确的。 我在八年前的tkinter cannot display unicode characters correctly上看到过这个线程,我的问题似乎很相似,但是也没有解决方案。 我粘贴下面的代码的简化的版本。请注意-所有使用的字体均已安装在我的系统中。

root = tk.Tk()
text = 'श्वसन प्रणाली में नाक गुहा, ट्रेकिआ और फेफड़े होते हैं'
labelcheck = ttk.Label(text=text, font = "Lohit\ Devnagri")
textcheck = tk.Text()
textcheck.insert(tk.END, text)
canvascheck = tk.Canvas(root,width=800, height=200)
canvascheck.create_text(200, 20, font="Lohit\ Devnagri", text=text)
labelcheck.grid(row = 0, column = 0)
textcheck.grid(row =0, column = 1)
canvascheck.grid(row = 1, column =0)
print(text)
root.mainloop()

控制台中打印的文本与代码中的文本完全匹配。 tkinter用户界面中的文本位于下面的图像链接中。

Tkinter Screen

请注意,对于一个不懂该语言但对于说母语的人/阅读者来说,变化很小。

所以,问题是tkinter不能正确处理所有unicode字符吗?我是否应该停止朝着使其工作的方向发展呢?我正在Raspberrypi上开发应用程序,因此我不想离开tkinter,因为它显然响应速度快且重量轻。

这里的任何帮助对我来说都是无价之宝。

编辑1: 根据progmaticos的建议,我采用了前几个单词的unicode序列,并将normalize API应用于它们。我仍然看到相同的问题-python打印出的内容是正确的,而tkinter的GUI中显示的内容是错误的。

unicodetext = '\u0936\u094D\u0935\u0938\u0928\20\u092A\u094D\u0930\u0923\u093E\u0932\u0940'

text1 = unicodedata.normalize('NFC', unicodetext)
text2 = unicodedata.normalize('NFD', unicodetext)
text3 = unicodedata.normalize('NFKD', unicodetext)

1 个答案:

答案 0 :(得分:1)

问题与tkinter无关。看起来这是操作系统问题。 Windows上与python版本相同(3.8)相同的应用程序正确显示unicode字符。在ubuntu和rasbian中,问题仍然存在。未来几天将检查该问题。但是问题出在tkinter的python之外。谢谢大家的帮助。