2016-09-15 170 views
0

虽然在Windows上tkinter似乎正确显示字符,但在Linux上相同的代码不会发生同样的情况。Tkinter在Linux上不能正确显示Unicode字符

我试过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() 

的Windows: The buttons as seen on windows

的Linux: The same buttons on Linux

如何使Tkinter的呈现在Linux上,这些统一码?

+2

您是否安装了可显示这些字形的字体? – schlenk

回答

1

您的Linux Mint机器上的Arial似乎不支持这些字符。

我建议在Linux上添加Windows的字体。

一个简单的指南可以在这里找到: https://community.linuxmint.com/tutorial/view/29

此外,我会建议使用的字体属性的扩展版本中tkinter如下:

button = Button(parent, text=u'\u23ED', font=('Font Name', size, 'decoration') 

button = Button(parent, text=u'\u23ED', font=('Arial', 12, 'bold') 

这样,您就可以轻松地支持字体名字中有空格。

1

在您的Linux安装中,字体“arial”不支持unicode字符U + 23EE和U + 23ED。你可以用字体管理器检查吗?

+0

我明白了,Arial不附带我的Linux Mint版本。 支持unicode的Windows和Linux都有共享的字体吗? –

1

从2003年开始,所有现代Linux GUI工具包都支持字体替换(如果缺少字形,该工具包将使用其他字体来完成选定的字体),但tk不是现代工具包,它是面向Windows和对接丑陋在Linux上,它很大程度上错过了这一改变,不知道它过去如何陷入困境(另见fontconfig,harfbuzz-ng,pango)。

你需要确保你已经安装的字体,包括你需要的字形(与gucharmap右击检查)。例如,在Linux上使用大型编码的常见字体是Dejavu。

如果你的TK版终于赶上了工具包的其余部分将使用这种字体透明地完成你所选择的一个。如果不是,则需要在代码中明确选择正确的字体。

你很难在Linux和Windows上找到常用字体。 Linux系统部署自由和开放的字体,Microsoft部署专有字体与限制性许可。您在系统上找到的Arial可能是一个陈旧的不完整的bug版本,可疑许可证,大多数Linux版本拒绝部署。不要指望其他地方存在,如果你想避免法律问题,不要求其他人部署它。

相反,你在Linux上找到大多数字体可以部署没有在Windows限制性条件,但不会是在默认情况下。在做出最终选择之前,请检查您要使用的字体的许可证。