2016-09-15 130 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限制性條件,但不會是在默認情況下。在做出最終選擇之前,請檢查您要使用的字體的許可證。