web-dev-qa-db-ja.com

tkinter-テキストのフォントを設定する方法は?

tk.Textでutf-8文字を表示するのに最適なフォントを見つけようとしています。

pythonこのコードを使用してtkが知っているすべての姓を出力します。

print(font.families(root=self.parent))

このコードを使用する使用法のすべての既知の名前:

print(font.names(root=self.parent))

ただし、ファミリーからの出力は、1つ以上の単語からなる名前を持つフォントのリストです。次のように1つのWordで簡単に設定できます。

text = tk.Text(master=self.frame)
text.configure(font='helvetica 12')

しかし、複数の単語で構成されるフォント名で同じことをしようとすると、エラーが発生します。

_tkinter.TclError: expected integer but got <second Word of the family name>

Tkウィジェットではなくtkウィジェットであるため、スタイルを設定できません。残念ながら、次のことはできません。

style.configure('My.TText', fontsize=12, font='<family name with multiple words>')

また、このような姓の空白を単に削除しようとしました:

text.configure(font='fangsongti')

しかし、tkinterは何らかの代替フォントを使用します。次のような名前を入力してチェックしました。

text.configure(font='fangsongtisdngfjsbrgkrkjgbkl')
print(text.cget('font'))

これにより、姓として入力した正確な文字列が出力されます。したがって、複数の名前の名前を除くすべてを受け入れるだけです。

私はいくつかのフォントを見つけましたが、見た目は問題ありませんが、特定のサイズでのみであり、ほとんどのシステムで使用できるかどうかはわかりません。

# helvetica 12
# gothic 13
# mincho 13

複数の単語で構成される名前のフォントを設定するにはどうすればよいですか?できない場合、1つの単語の名前を持つどのフォントが、一般的なフォントサイズの中国語(ただし排他的ではありません!)などのutf-8文字を表示するのに適していますandはほとんどのシステム?

7

この方法でフォントを指定するときは、タプルを使用します。

text.configure(font=("Times New Roman", 12, "bold"))

さらに、独自のカスタムフォントオブジェクトを作成し、名前で属性を指定できます。注:フォントオブジェクトを作成する前に、最初にルートウィンドウを作成する必要があります。

# python 2
# import Tkinter as tk
# from tkFont import Font

# python 3
import tkinter as tk
from tkinter.font import Font

root = tk.Tk()
text = tk.Text(root)
...
myFont = Font(family="Times New Roman", size=12)
text.configure(font=myFont)

独自のフォントを作成することの利点は、後でフォントの属性を変更でき、そのフォントを使用するすべてのウィジェットが自動的に更新されることです。

myFont.configure(size=14)
15
Bryan Oakley