KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
Tkinterで使われるフォントって?2種類のフォントの設定方法を丁寧に解説

Tkinterで使われるフォントって?2種類のフォントの設定方法を丁寧に解説

今回はTkinterで使われるフォントに関して、2種類のフォントの設定方法をお伝えしながら、わかりやすく解説いたします。フォントの使い方がわからない、フォントに関して理解を深めたい方へおすすめです。是非最後までご覧ください。

目次
  1. そもそもフォントはどこで設定するの?
  2. フォントの設定方法【2種類】
    1. font optionへ直接入力する
    2. tkinter.font.Fontクラスのインスタンスを利用する
  3. Tkinterで使用できるフォント名一覧の確認方法
  4. まとめ
  5. 参考文献

そもそもフォントはどこで設定するの?

Tkinterでは、フォント(フォント名、文字列の大きさ、文字列を太字にするか、文字列を斜体にするか、文字列へ下線をつけるか、文字列へ取り消し線をつけるか等)の設定が可能です。

ではどこでフォントを設定するのでしょう?

Tkinterでフォントを設定する場合、Widgetのoption設定で行います。

要するに、

  • Widgetを作る際にoptionが利用できる
  • optionを使うことでWidgetの詳細設定ができる
  • optionを利用してフォント設定ができる

と言うことです。

Widgetに関して詳しく知りたい場合は、Tkinterで使われるWidgetの一覧をまとめてみました!?をご確認ください。

例えば、以下のようなコードを作成すると、

1import tkinter as tk
2
3class Application(tk.Frame):
4    # フォントを設定して、label Widgetを表示する関数
5    # フォントについて : https://www.weblio.jp/content/%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88
6    def getFontLabel(self):
7        # label Widgetを作成する。
8        # tk.Label(option1, option2, ...)
9        # text : テキスト情報
10        # width : 幅の設定
11        # height : 高さの設定
12        # bg : 背景色の設定
13        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
14        # font : フォントの設定。
15        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
16        label = tk.Label(text="test", width=15, height=5, bg="#008000", font=('arial', 50, 'underline'))
17        # label Widgetをどのように配置するのか?
18        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
19        label.pack()
20
21    def __init__(self, master=None):
22        # Windowの初期設定を行う。
23        super().__init__(master)
24        # Windowの画面サイズを設定する。
25        # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
26        self.master.geometry("300x200")
27        self.getFontLabel()
28        
29# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
30if __name__ == "__main__":
31    # Windowを生成する。
32    # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
33    root = tk.Tk()
34    app = Application(master=root)
35
36    # Windowをループさせて、継続的にWindow表示させる。
37    # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
38    app.mainloop()

以下の画像のように、label Widgetの文字列のフォントを変更できます。

先ほどのコードでは、label Widgetを用いてフォントの設定を行いましたが、フォントを設定できるWidgetはたくさんあります。

「フォントを設定できるWidget」に関して、以下の表にまとめましたので、一度確認してみてください。

Widget名Widgetの特徴
comboboxcomboboxを選択すると、表示される様々な選択肢を選んだり、combobox内へ直接文字入力できるテキストボックスとして利用する。
Text             文字を入力、表示できる部品として利用する。
entryWebページやアプリの会員登録、お問い合わせ画面などで利用されるテキストボックスとして利用する。
listbox複数の選択肢の中から、1つ以上を選ぶときに使われる入力フォームを意味します。
spinboxWebページやアプリの会員登録、お問い合わせ画面などで利用されるテキストボックスに、右側へ🔼🔽のボタンが付いたもの。
scale   ファイルのダウンロード状況やタスクの進捗などを視覚化したもの。
menubutton   menubuttonを選択すると、様々なmenuを展開できる入れ物。
menubar   パソコン上(うえ)に表示される選択肢として利用する。
radiobutton   複数の選択肢の中から、1つを選ぶときに使われる入力フォーム。
checkbutton   選択するとレ点(チェックマーク)が付く、見た目が四角な、画面の部品。
labelframe   1つ以上のWidgetを取りまとめるもの = Frame
button   Webページやアプリで利用されるボタン。
label   文字や画像などを画面上に表示するもの。
optionmenuoptionmenuを選択すると、様々な選択肢を表示する入れ物。
scrolledtextテキストボックスにscrollbarをとりつけたものとして利用する。

フォントの設定方法【2種類】

フォントの設定方法は、

  • font optionへ直接入力する
  • tkinter.font.Fontクラスのインスタンスを利用する

の2種類存在します。順に見ていきましょう。

font optionへ直接入力する

Widgetのfont optionへ直接記入する形で、フォントの設定を行います。ひとつのWidgetへフォントの設定を行いたい場合によく利用されます。

1import tkinter as tk
2
3# {Widget名}には、Labelなどが入る。
4# 第一引数(必須) : フォント名
5# 第二引数(任意) : 文字列の大きさ(整数)
6# 第三引数以降(任意 かつ 順不同) ##################
7# italic(文字列を斜体表示する場合), roman(文字列を斜体表示しない場合、デフォルト。)
8# bold(文字列を太字にする場合) or normal(文字列を太字にしない場合、デフォルト。)
9# underline(文字列へ下線をつける場合。下線をつけない場合はunderlineを宣言しない。)
10# overstrike(文字列へ取り消し線をつける場合。取り消し線をつけない場合はoverstrikeを宣言しない。)
11##############################################
12tk.{Widget名}(font=('フォント名', 文字列の大きさ(整数), "italic" or "roman", "bold" or "normal", "underline", "overstrike"))

で定義されます。

またフォント名、文字の大きさを変更しないで、font optionを使いたい場合は、

1# {Widget名}には、Labelなどが入る。
2# 第一引数(必須) : フォント名
3# 第二引数(任意) : 文字列の大きさ(整数)
4# 第三引数以降(任意 かつ 順不同) ##################
5# italic(文字列を斜体表示する場合) or roman(文字列を斜体表示しない場合、デフォルト。)
6# bold(文字列を太字にする場合) or normal(文字列を太字にしない場合、デフォルト。)
7# underline(文字列へ下線をつける場合。下線をつけない場合はunderlineを宣言しない。)
8# overstrike(文字列へ取り消し線をつける場合。取り消し線をつけない場合はoverstrikeを宣言しない。)
9##############################################
10tk.{Widget名}(font=("", 0, "italic" or "roman", "bold" or "normal", "underline", "overstrike"))

と記述してご利用ください。

例えば以下のようなコードを作成すると

1import tkinter as tk
2
3class Application(tk.Frame):
4    # フォントを設定して、label Widgetを表示する関数
5    # フォントについて : https://www.weblio.jp/content/%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88
6    def getFontLabel(self):
7        # label Widgetを作成する。
8        # tk.Label(option1, option2, ...)
9        # text : テキスト情報
10        # width : 幅の設定
11        # bg : 背景色の設定
12        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
13        # font : フォントの設定。
14        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
15        label1 = tk.Label(text="test", width=10, bg="#008000", font=('arial', 15))
16        # label Widgetをどのように配置するのか?
17        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
18        label1.pack()
19
20        # label Widgetを作成する。
21        # tk.Label(option1, option2, ...)
22        # text : テキスト情報
23        # width : 幅の設定
24        # bg : 背景色の設定
25        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
26        # font : フォントの設定。
27        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
28        label2 = tk.Label(text="test", width=10, bg="#008000", font=('arial', 20))
29        # label Widgetをどのように配置するのか?
30        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
31        label2.pack()
32
33        # label Widgetを作成する。
34        # tk.Label(option1, option2, ...)
35        # text : テキスト情報
36        # width : 幅の設定
37        # bg : 背景色の設定
38        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
39        # font : フォントの設定。
40        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
41        label3 = tk.Label(text="test", width=10, bg="#008000", font=('arial', 15, 'italic'))
42        # label Widgetをどのように配置するのか?
43        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
44        label3.pack()
45
46        # label Widgetを作成する。
47        # tk.Label(option1, option2, ...)
48        # text : テキスト情報
49        # width : 幅の設定
50        # bg : 背景色の設定
51        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
52        # font : フォントの設定。
53        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
54        label4 = tk.Label(text="test", width=10, bg="#008000", font=('arial', 15, 'bold'))
55        # label Widgetをどのように配置するのか?
56        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
57        label4.pack()
58
59        # label Widgetを作成する。
60        # tk.Label(option1, option2, ...)
61        # text : テキスト情報
62        # width : 幅の設定
63        # bg : 背景色の設定
64        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
65        # font : フォントの設定。
66        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
67        label5 = tk.Label(text="test", width=10, bg="#008000", font=('arial', 15, 'underline'))
68        # label Widgetをどのように配置するのか?
69        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
70        label5.pack()
71
72        # label Widgetを作成する。
73        # tk.Label(option1, option2, ...)
74        # text : テキスト情報
75        # width : 幅の設定
76        # bg : 背景色の設定
77        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
78        # font : フォントの設定。
79        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
80        label6 = tk.Label(text="test", width=5, bg="#008000", font=('arial', 15, 'overstrike'))
81        # label Widgetをどのように配置するのか?
82        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
83        label6.pack()
84
85        # label Widgetを作成する。
86        # tk.Label(option1, option2, ...)
87        # text : テキスト情報
88        # width : 幅の設定
89        # bg : 背景色の設定
90        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
91        # font : フォントの設定。
92        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
93        label7 = tk.Label(text="test", width=5, bg="#008000", font=('', 0, 'underline', 'italic'))
94        # label Widgetをどのように配置するのか?
95        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
96        label7.pack()
97
98    def __init__(self, master=None):
99        # Windowの初期設定を行う。
100        super().__init__(master)
101        # Windowの画面サイズを設定する。
102        # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
103        self.master.geometry("300x200")
104        self.getFontLabel()
105
106# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
107if __name__ == "__main__":
108    # Windowを生成する。
109    # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
110    root = tk.Tk()
111    app = Application(master=root)
112
113    # Windowをループさせて、継続的にWindow表示させる。
114    # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
115    app.mainloop()

以下の画像のようにフォントの設定を行います。

筆者のMac OSでは、overstrike(取り消し線)を利用できませんでした。

tkinter.font.Fontクラスのインスタンスを利用する

tkinter.font.Fontクラスのインスタンスを利用して、フォントを設定する方法になります。2つ以上のWidgetに対し、統一してフォントの設定を行いたい場合に、よく利用されます。

1import tkinter as tk
2# tkinter.font.Fontクラスを利用するためにimportする。
3import tkinter.font
4
5# {Widget名}には、Labelなどが入る。
6# family : フォント名
7# size : 文字列の大きさ(整数)
8# slant : italic(文字列を斜体表示する場合) or roman(文字列を斜体表示しない場合、デフォルト。)
9# weight : bold(文字列を太字にする場合) or normal(文字列を太字にしない場合、デフォルト。)
10# underline : True(文字列へ下線をつける場合) or False(文字列へ下線をつけない場合、デフォルト。)
11# overstrike : True(文字列へ取り消し線をつける場合) or False(文字列へ取り消し線をつけない場合、デフォルト。)
12fontData = tkinter.font.Font(family='フォント名', size=文字列の大きさ(整数), slant="italic" or "roman", weight="bold" or "normal", underline=True or False, overstrike=True or False)
13
14tk.{Widget名}(font=fontData)
15
16# 現在のフォント設定を確認する場合
17# print(fontData.config())

で定義されます。

例えば以下のようなコードを作成すると

1import tkinter as tk
2import tkinter.font
3
4class Application(tk.Frame):
5    # フォントを設定して、label Widgetを表示する関数
6    # フォントについて : https://www.weblio.jp/content/%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88
7    def getFontLabel(self):
8        # label Widgetを作成する。
9        # tk.Label(option1, option2, ...)
10        # text : テキスト情報
11        # width : 幅の設定
12        # bg : 背景色の設定
13        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
14        # font : フォントの設定。
15        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
16        label1 = tk.Label(text="test", width=10, bg="#008000", font=('', 0))
17        # label Widgetをどのように配置するのか?
18        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
19        label1.pack()
20
21        fontData = tkinter.font.Font(underline=True, weight='bold')
22
23        # label Widgetを作成する。
24        # tk.Label(option1, option2, ...)
25        # text : テキスト情報
26        # width : 幅の設定
27        # bg : 背景色の設定
28        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
29        # font : フォントの設定。
30        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
31        label2 = tk.Label(text="test", width=10, bg="#008000", font=fontData)
32        # label Widgetをどのように配置するのか?
33        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
34        label2.pack()
35
36    def __init__(self, master=None):
37        # Windowの初期設定を行う。
38        super().__init__(master)
39        # Windowの画面サイズを設定する。
40        # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
41        self.master.geometry("300x200")
42        self.getFontLabel()
43
44# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
45if __name__ == "__main__":
46    # Windowを生成する。
47    # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
48    root = tk.Tk()
49    app = Application(master=root)
50
51    # Windowをループさせて、継続的にWindow表示させる。
52    # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
53    app.mainloop()

以下の画像のようにフォントの設定を行います。

Tkinterで使用できるフォント名一覧の確認方法

フォント名一覧を確認する場合、tkinter.fontのfamilies関数を利用すると便利です。

例えば以下のようなコードを作成して、

1import tkinter as tk
2import tkinter.font as font
3
4# Windowを生成する。
5# Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
6root = tk.Tk()
7print(font.families())

Python環境で実行すると、以下の画像のようにフォント名一覧を確認できます。

また最後にフォント名に適応した、label Widgetの文字列がどのように描画されるのか、一覧で確認できるコードを作成しました。

以下のコードを作成して、

1import tkinter as tk
2import tkinter.font
3
4class Application(tk.Frame):
5    # フォント名に適応した、label Widgetの文字列一覧を確認する関数
6    def getFontNameList(self):
7        i = 0
8        # tkinter.font.families() : フォント名一覧を取得する。
9        for fontName in tkinter.font.families():
10            # label Widgetを作成する。
11            # tk.Label(option1, option2, ...)
12            # text : テキスト情報
13            # width : 幅の設定
14            # bg : 背景色の設定
15            # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
16            # font : フォントの設定。
17            # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
18            label = tk.Label(text=fontName, width=20, bg="#008000", font=(fontName, 10, 'underline'))
19
20            # 12個のlabel Widgetを横に表示して、次の行へ移動する。繰り返し、12個のlabel Widgetを横に表示する。
21            # gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/
22            label.grid(row=int((i / 12)), column=(i % 12))
23            i = i + 1
24
25    def __init__(self, master=None):
26        # Windowの初期設定を行う。
27        super().__init__(master)
28        # Windowの画面サイズを設定する。
29        # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
30        self.master.geometry("300x200")
31        self.getFontNameList()
32
33# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
34if __name__ == "__main__":
35    # Windowを生成する。
36    # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
37    root = tk.Tk()
38    app = Application(master=root)
39
40    # Windowをループさせて、継続的にWindow表示させる。
41    # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
42    app.mainloop()

Python環境で実行すると、以下の画像のようにフォント名に適応した、label Widgetの文字列の一覧を確認できます。

まとめ

  • Tkinterでは、フォントの設定が可能
  • Tkinterでフォントを設定する場合、font optionを利用する。
  • フォントの設定方法として、 font optionを直接編集する、tkinter.font.Fontクラスのインスタンスを利用するの2種類が存在する。

参考文献