Tkinter: ウィジェットのフォントを指定する

Tkinterの多くのウィジェットには、 フォントタイプやフォントサイズなどフォントに関して設定する 「font」オプションがあります。

ここではfontオプションを使ってウィジェットのフォントを指定する 方法を解説します。

fontオプションのパラメータ

fontオプションのパラメーターは次の通りです。
第1パラメータのfamily(フォントタイプ)だけが省略不可なので 注意してください。
フォントタイプがデフォルトのフォントで構わない場合は 「""」または「''」のように空文字を指定できます。

パラメータ概要省略
familyフォントタイプ不可 ""(デフォルトフォント),
"System", "Arial" 等多数
sizeフォントサイズ 10, 20 等の数値
weight太さ "normal"(通常:デフォルト)、
"bold"(太字)
slant斜体 "roman"(ローマン体:デフォルト)、
"italic"(斜体)
underline下線 "normal"(なし:デフォルト)、
"underline"(下線)
overstrike打ち消し線 "normal"(なし:デフォルト)、
"overstrike"(打ち消し線)

フォントオプションの使用例

フォントオプションの使用例として、 Buttonウィジェットのfontオプションを設定してみます。

■ ボタン1.フォントタイプはデフォルト、サイズは11

■ ボタン2.フォンタオタイプは"MS ゴシック"、サイズは15、太字

以下のサンプルコードの太字部分がfontオプションに関する設定です。

import tkinter as tk

# ウィンドウ作成
root = tk.Tk()
# タイトル
root.title("テスト")
# ウィンドウサイズ
root.geometry("150x150")


# フォントタイプはデフォルト、サイズは11
fonts1 = ("", 11)
button1 = tk.Button(root, text="ボタン 1", font=fonts1)
button1.place(x=10, y=20, width=100, height=50)

# フォントタイプは"MS ゴシック"、サイズは15、太字
fonts2 = ("MS ゴシック", 15, "bold")
button2 = tk.Button(root, text="ボタン 2", font=fonts2)
button2.place(x=10, y=80, width=100, height=50)

# メインループ
root.mainloop()

上のコードを実行すると、 文字サイズやフォントタイプの異なる2つのボタンが表示されされます。

フォント設定

タプルで直接指定する

上のコードの「fonts1 = ("", 11)」の部分で、 変数 fonts1に格納しているのは単なるタプルです。 一旦変数 fonts1に格納して指定していますが、 次のように直接タプルを指定することも可能です。

button1 = tk.Button(...., font=("", 11))

どちらでも好きな方で記述して構いません。

ただし一旦変数に格納しておいた方が 他のウィジェットにも指定できますし、 コードも見やすくなると思います。

使用できるフォントタイプを調べる

使用できるフォントタイプを調べるには、 tkinter.fontモジュールのfamilies()関数を使用します。

import tkinter as tk
import tkinter.font

root = tk.Tk()
print(tkinter.font.families())

数多くのフォントタイプが表示されるので、 実行結果のごく一部を紹介します。 (私の環境では約300個のフォントタイプが表示されました)

実行結果
('System', '@System', 'Terminal', '@Terminal', 'FixedSys', '@FixedSys', 'Modern', 'Roman', 'Script', 'Courier', 'MS Serif', 'MS Sans Serif', 'Small Fonts', '@Small Fonts', 'Nachlieli CLM', 'Frank Ruhl Hofshi', 'Miriam Libre', 'Marlett', 'Arial', 'Arabic Transparent', 'Arial Baltic', 'Arial CE', 'Arial CYR', 'Arial Greek', 'Arial TUR', 'Arial Black', 'Bahnschrift Light', 'Bahnschrift SemiLight',...
Python