2016-09-15 19 views
0

Windows上でtkinterが文字を正しく表示しているようですが、Linux上で同じコードで同じことは起こりません。TkinterがLinux上でUnicode文字を正しく表示しない

hereの方法を試しましたが、文字の後に.encode("utf-8")を追加しましたが、両方のシステムでcharがヘアワイヤーになります。私はまた、ユニコード表現を使用する代わりに文字をコピーして貼り付けようとしましたが、それは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:Linux上でこれらのユニコードをレンダリングTkinterを作る方法 The same buttons on 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

フォント "arial"は、LinuxインストールでUnicode文字U + 23EEおよびU + 23EDをサポートしていません。あなたはそれをフォントマネージャで確認できますか?

+0

私は、ArialにLinux Mintの私のバージョンは付属していません。 WindowsとLinuxの両方で共有されているユニコードをサポートするフォントはありますか? –

1

すべての現代のLinux GUIツールキットは、2003年頃からフォントの置換をサポートしています(グリフがない場合、ツールキットは選択されたフォントを使用して選択されたフォントを完成させますが、tkは現代のツールキットではありません) Linux上では、この変更はほとんど見逃してしまいました。現在の状況ではどうしていたのか分かりません(fontconfig、harfbuzz-ng、pangoも参照してください)。

必要なグリフを含むフォントがインストールされていることを確認する必要があります(gucharmapを右クリックしてチェックしてください)。 Linux上で大きなエンコーディングを持つ一般的なフォントはDejavuです。

あなたのtkバージョンが最終的に他のツールキットに追いついた場合、このフォントを透過的に使用して、選択したものを完成させます。そうでない場合は、コード内の正しいフォントを明示的に選択する必要があります。

LinuxおよびWindowsで一般的なフォントを見つけることはほとんどありません。 Linuxシステムではフリーフォントとオープンフォントが導入され、Microsoftは独自のフォントを制限付きライセンスで展開しています。あなたがシステム上で見つけたArialはおそらく、不確かな不完全なバグのバージョンであり、疑わしいライセンスで、ほとんどのLinuxバージョンは展開を拒否します。法的な問題を避けたい場合は、それ以外の場所には存在しないよう配慮し、配備を依頼しないでください。

逆に、Linux上で見つかるほとんどのフォントは、Windowsでは制限のない条件で展開できますが、デフォルトでは使用できません。最終的な選択を行う前に、使用するフォントのライセンスを確認してください。

関連する問題