虽然在Windows上tkinter似乎正确显示了字符,但在Linux上使用相同的代码却不会发生同样的情况。
我已经尝试了显示here的方法,在角色后面添加了.encode("utf-8")
,但这只会使char变为两个系统上的线。我也尝试过复制和粘贴字符而不是使用unicode表示,虽然这适用于Windows,但对于Linux来说也是如此。
显示我的问题的代码片段:
# -*- coding: utf-8 -*-
from tkinter import *
master = Tk()
previous_button = Button(master,
text=u'\u23EE',
relief='flat',
activebackground='#282828',
activeforeground='#1DB954',
bg='#282828',
fg='#1DB954',
borderwidth=0,
bd=0,
highlightthickness=0,
font='arial 11',
)
next_button = Button(master,
text=u'\u23ED',
relief='flat',
activebackground='#282828',
activeforeground='#1DB954',
bg='#282828',
fg='#1DB954',
bd=0,
highlightthickness=0,
borderwidth=0,
font='arial 11',
)
previous_button.grid()
next_button.grid()
mainloop()
如何让tkinter在Linux上渲染这些unicodes?
答案 0 :(得分:1)
字体“arial”不支持Linux安装上的unicode字符U + 23EE和U + 23ED。你能用字体管理器检查吗?
答案 1 :(得分:1)
Linux Mint机器上的Arial似乎不支持这些字符。
我建议在Linux上添加Windows中的字体。
这里有一个简单的指南: https://community.linuxmint.com/tutorial/view/29
此外,我建议在tkinter
中使用扩展版本的font属性,如下所示:
button = Button(parent, text=u'\u23ED', font=('Font Name', size, 'decoration')
button = Button(parent, text=u'\u23ED', font=('Arial', 12, 'bold')
通过这种方式,您可以轻松支持名称中带有空格的字体。
答案 2 :(得分:1)
自2003年左右以来,所有现代Linux GUI工具包都支持字体替换(如果缺少字形,工具包将使用其他字体来完成所选字体),但是tk不是现代工具包,它是面向窗口的,而且很丑陋。 Linux,它在很大程度上错过了这一变化,不确定它目前是如何陷入困境的(参见fontconfig,harfbuzz-ng,pango)。
您需要确保安装了包含您需要的字形的字体(请在gucharmap中右键单击检查)。例如,在Linux上使用大编码的常见字体是Dejavu。
如果你的tk版本最终赶上了其余的工具包,它将透明地使用这个字体来完成你选择的那个。如果不是,您需要在代码中明确选择正确的字体。
您不太可能在Linux和Windows上找到常用字体。 Linux系统部署免费和开放字体,Microsoft部署具有限制许可的专有字体。您在系统上找到的Arial可能是一个过时的不完整的错误版本,具有可疑的许可,大多数Linux版本都拒绝部署。不要指望它存在于其他地方,如果你想避免法律问题,不要让别人部署它。
相反,您在Linux上找到的大多数字体都可以在Windows上无限制地部署,但默认情况下不会。在做出最终选择之前,请检查您要使用的字体的许可证。