GUI

Python Tkinter Fonts

Tkのラベルウィジェットでは、フォント設定オプションにより、テキスト表示に使用するフォントを変更できる。キャンバスウィジェットやテキストウィジェットでも、フォントを指定できる。テキストを表示する他のテーマウィジェットには、フォント設定オプションがないかもしれないが、それらのフォントはスタイルを使って変更できる。

Tkの多くのものと同様に、デフォルトのフォントは通常、良い選択。もし変更が必要な場合は、このセクションで名前付きフォントを使った最良の方法を紹介する。Tk には、UIのすべての異なるコンポーネントで使用するのに適した名前付きフォントが含まれている。これらは、あなたが使用している特定のプラットフォームの規約を考慮に入れている。さらに柔軟性が必要な場合は、独自のフォントを指定することもできる。

フォントの指定やその他のフォントに関する操作の詳細は、フォントコマンドリファレンスを参照すること。

標準フォント

各プラットフォームでは、標準的なUI要素に使用されるべき特定のフォントが定義されている。Tk は、これらの決定の多くを、名前付きフォントの標準セットにカプセル化している。これらのフォントはすべてのプラットフォームで利用可能だが、使用される正確なフォントは異なる。これは、プラットフォームの違いを抽象化するのに役立つ。もちろん、標準的なウィジェットは、これらの名前付きフォントを使用する。定義済みのフォントは以下の通り。

TkDefaultFont他に指定されていない項目のデフォルトのフォント
TkTextFontエントリウィジェット、リストボックスなどに使用されるフォント
TkFixedFont標準的な固定幅のフォント.
TkMenuFontメニューアイテムに使用されるフォント
TkHeadingFontリストやテーブルの列見出し用フォント
TkCaptionFontウィンドウとダイアログのキャプションバーのフォント
TkSmallCaptionFontツールダイアログ用の小さなキャプションフォント
TkIconFontアイコンキャプション用フォント
TkTooltipFontツールチップのフォント

プラットフォーム依存のフォント

Tk は、特定のプラットフォームであまり一般的でない状況に対応するために、追加の名前付きフォントを提供する。各プラットフォームのガイドラインでは、これらのフォントをどこでどのように使用すべきかを詳しく説明している。これらのフォントは、特定のプラットフォームでのみ定義されている。アプリケーションを複数のプラットフォームに移植する場合は、この点を考慮する必要がある。

X11 上の Tk は、有効な X11 フォントの名前なら何でも認識する。しかし、これらはOSやインストールされたソフトウェア、個々のマシンの設定によって異なる可能性がある。あなたのX11システムで利用可能なフォントが、他のX11システムにもインストールされているという保証はない。

Windows では、Tk は「ディスプレイ」コントロールパネルで設定できるすべてのフォントについて、名前付きフォントを提供する。これは次のフォント名を認識する。(system, ansi, device, systemfixed, ansifixed, and oemfixed)

macOSでは、Apple Human Interface Guidelines(HIG)により、さらに多くのフォントが指定されている。Tk は以下の名前を認識する。(systemSystemFont, systemSmallSystemFont, systemApplicationFont, systemViewsFont, systemMenuItemFont, systemMenuItemCmdKeyFont, systemPushButtonFont, systemAlertHeaderFont, systemMiniSystemFont, systemDetailEmphasizedSystemFont.SystemSystemFont, systemSystemFont, systemSystemFont, systemSystemFont, systemApplicationFont, systemViewsFont, systemEmphasizedSystemFont, systemSmallEmphasizedSystemFont, systemLabelFont, systemMenuTitleFont, systemMenuItemMarkFont, systemWindowTitleFont, systemUtilityWindowTitleFont, systemToolbarFont, systemDetailSystemFont)

名前付きフォントの操作

Tk は、名前付きフォントを扱うのに役立ついくつかの操作を提供する。まず、現在定義されているすべての名前付きフォントのリストを取得できる。

from tkinter import font
font.names()

実際のシステムフォントは、fontという抽象的な名前で表され、知ることができる。このフォントは、ファミリー(TimesやHelveticaなど)、サイズ(正の場合はポイント、負の場合はピクセル)、ウェイト(normalやbold)、スラント(romanやitalic)、アンダーラインやオーバーストライクのブール属性で構成されている。フォントのメトリクス(フォントの文字の高さや等幅かどうか)や、そのフォントで表示されたテキストの幅が何ピクセルになるかを測定することもできる。

>>> from tkinter import font
>>> f = font.nametofont('TkTextFont')
>>> f.actual()
{'family': '.AppleSystemUIFont', 'size': 13, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}
>>> f.metrics()
{'ascent': 13, 'descent': 3, 'linespace': 16, 'fixed': 0}
>>> f.measure('The quick brown fox')
124

Tkinterは、名前付きフォントの情報を保持するためにFontクラスを提供している。このクラスのインスタンスは、nametofont関数を用いてフォントの名前から作成することができる。アプリケーションで名前付きフォントを使う場合(例えば、ラベルのフォント設定オプションで)、フォント名(文字列として)またはFontインスタンスのどちらかを指定する。

また、独自のフォントを作成し、定義済みのフォントと全く同じように使用することも可能。この場合、フォントの名前を決め、そのフォントの属性を上記のように指定する。

from tkinter import font
highlightFont = font.Font(family='Helvetica', name='appHighlightFont', size=12, weight='bold')
ttk.Label(root, text='Attention!', font=highlightFont).grid()

もし名前を与えなければ、Tkinterは名前を生成し、それはfont.nameまたはstr(font)によって取得することができる。通常、名前を指定するのが最善。

family属性は、フォントファミリーを指定する。Tkでは、Courier、Times、Helveticaが使用可能だが、これらは適切な等幅、セリフ、サンセリフフォントにマップされるかもしれない)。システムにインストールされている他のフォントも使用できるが、移植性についての通常の注意事項が適用されり。利用可能なすべてのフォントファミリーの名前は以下で取得できる。

font.families()

フォントの説明

フォントを指定するもう一つの方法は、属性のリストで、フォント・ファミリーから始まり、オプションでサイズと1つ以上のスタイル・オプションを含むこと。この例として、Helvetica、Helvetica 12、Helvetica 12 bold、Helvetica 12 bold italicなどがある。これらのフォント記述は、フォント設定オプションなど、名前付きフォントを使う場所であればどこでも使うことができる。