2017-08-03 10 views
0

地域のUnicode文字(私が使用しているスクリプトはGurmukhiとUnicode互換のフォントでRaaviです)をテキストウィジェットから取り出し、端末上に印刷します画面。テキストウィジェットにUnicode文字が表示されない

いくつかの文字列をテキストウィジェットにコピー&ペーストすると、イメージに示されているようにボックスに変換されますが、端末ウィンドウに完全な文字列が印刷されるという問題が発生します。

私はencodingdecodingの機能をcodecsから試しましたが、それも無駄になります。

TkinterのテキストウィジェットのUnicode入力メカニズムに関する回答が見つかりません。

テキストウィジェットで完全なユニコード文字列を表示する方法は?ここで

は私のコードです:ここでは

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import tkinter.font as tkFont 
from tkinter import * 

def retrieve_input(self): 
    inputValue = content_text.get("1.0", "end-1c") 
    print(inputValue) 

root = Tk() 
root.call('encoding', 'system', 'utf-8') 
customFont = tkFont.Font(family='Raavi', size=17) 
root.title("Unicode Handling") 
root.geometry('400x200+150+200') 
content_text = Text(root, wrap='word', font=customFont) 
content_text.configure(font=customFont) 
content_text.focus_set() 
content_text.pack(expand='yes', fill='both') 
scroll_bar = Scrollbar(content_text) 
content_text.configure(yscrollcommand=scroll_bar.set) 
scroll_bar.config(command=content_text.yview) 
scroll_bar.pack(side='right', fill='y') 
root.bind("<space>", retrieve_input) 
root.mainloop() 

は、入力と出力されます:

我々はテキストウィジェットで完璧なUnicode文字列をਸਤਵਿੰਦਰ表示することができますどのように

Input and Output

+0

使用している「Raavi」フォントがユニコードをサポートしていますか?文字列を使用することは、フォントを構成する適切な方法ではありません。おそらく、ウィジェットはあなたの文字をサポートしていないデフォルトのフォントに戻っているかもしれません。 –

+0

入力用のフォントを使用してUnicodeテキストを処理するために、[ここ](https://stackoverflow.com/questions/31918073/tkinter-how-to-set-font-for-text)に記載されているソリューションを使用しようとしました。 。私の知る限りでは、Pythonはコーデックを使ってUnicodeテキストを扱いますが、そのエンコードとデコードの機能は動作しません。 –

+0

文字を表示するには、フォントにグリフが必要です。それは100%正しくエンコードまたはデコードされますが、フォントが文字をサポートしていない場合、ウィジェットが文字を正しく表示することは不可能になります。あなたの最初のステップは、あなたが適切なフォントを使用していることを確認することです。 –

答えて

1

正しいフォントがインストールされていることを前提として、コードが正しく動作するはずです。私より、最小限の例にコードを削減しました:私のシステムで

import tkinter.font as tkFont 
from tkinter import * 

root = Tk() 
customFont = tkFont.Font(family='Raavi', size=17) 
content_text = Text(root, font=customFont, width=20, height=4) 
content_text.pack(expand='yes', fill='both') 
content_text.insert("end", 'ਸਤਵਿੰਦਰ') 

root.mainloop() 

を、これは次のようになり:

screenshot of tkinter window

私はcustomFont.actual()の結果を印刷するとき、私は次の取得(私はTkinterのがシステムに異なる場合があり、フォールバックフォントを、代用しますので)「Ravii」フォントがインストールされていない:

{ 
    'slant': 'roman', 
    'underline': 0, 
    'size': 17, 
    'family': 'DejaVu Sans', 
    'overstrike': 0, 
    'weight': 'normal' 
} 

T tkinterのインストールで認識されるすべてのフォントファミリのリストを参照してください。

+0

システム上であなたのコードを実行しようとしましたが、テキストの代わりに同じボックスが表示されます。どうしてか分かりません? –

+0

次の結果が得られました:{'underline':0、 'weight': 'normal'、 'family': 'fixed'、 'slant': 'roman'、 'size':17、 'overstrike':0} –

+2

@ programmer_123:フォントを正しく指定していないので、tkinterはデフォルトに戻っています。あなたの要求にもかかわらず、実際に使用されているのは "固定"というフォントファミリーです。 –

関連する問題