#1. はじめに
今回はTkinterのフォント設定方法について記載する.
tkinterとttkのウィジェットで指定方法が異なるため,両方の設定方法を以下にまとめる.
#2. ソースコード
tkinterとttkのウィジェットで,font引数がある場合はそれを使って指定する.
ttkのウィジェットのうち,font引数がない場合はstyle引数を使って指定する.
下記のプログラムは,Button1を押すとウィジェットの文字サイズを拡大,Button2を押すとウィジェットの文字サイズを縮小する.
from tkinter import ttk
import tkinter as tk
fontfamily = ""
fontsize = 30
def pressedButton1():
global fontfamily, fontsize
# 文字サイズ加算
if 10 <= fontsize < 50:
fontsize += 5
# 各ウィジェットに設定
style.configure("myButton1.TButton", font=(fontfamily, fontsize))
style.configure("myButton2.TButton", font=(fontfamily, fontsize))
button3["font"] = (fontfamily, fontsize)
label1["font"] = (fontfamily, fontsize)
label2["font"] = (fontfamily, fontsize)
style.configure("myButton.TButton", font=(fontfamily, fontsize))
def pressedButton2():
global fontfamily, fontsize
# 文字サイズ加算
if 10 < fontsize <= 50:
fontsize -= 5
# 各ウィジェットに設定
style.configure("myButton1.TButton", font=(fontfamily, fontsize))
style.configure("myButton2.TButton", font=(fontfamily, fontsize))
button3["font"] = (fontfamily, fontsize)
label1["font"] = (fontfamily, fontsize)
label2["font"] = (fontfamily, fontsize)
style.configure("myButton.TButton", font=(fontfamily, fontsize))
win = tk.Tk()
style = ttk.Style()
style.configure("myButton1.TButton", font=(fontfamily, fontsize))
style.configure("myButton2.TButton", font=(fontfamily, fontsize))
style.configure("myButton.TButton", font=(fontfamily, fontsize))
button1 = ttk.Button(win, text="Button1", style="myButton1.TButton", command=pressedButton1)
button1.grid()
button2 = ttk.Button(win, text="Button2", style="myButton2.TButton", command=pressedButton2)
button2.grid()
button3 = tk.Button(win, text="Button3", font=(fontfamily, fontsize))
button3.grid()
label1 = ttk.Label(win, text="Label1", font=(fontfamily, fontsize))
label1.grid()
label2 = tk.Label(win, text="Label2", font=(fontfamily, fontsize))
label2.grid()
button4 = ttk.Button(win, text="Button4", style="myButton.TButton")
button4.grid()
button5 = ttk.Button(win, text="Button5", style="myButton.TButton")
button5.grid()
win.mainloop()
#3. 補足
##3.1. Font
fontの指定オプションについては,下記のサンプルで使用しているFont
クラスを参照すると良い.
import tkinter as tk
import tkinter.font as font # 指定方法1
#from tkinter import font # 指定方法2
win = tk.Tk()
myfont = font.Font(win, family="System", size=30, weight="bold")
button = tk.Button(win, text="Button", font=myfont)
button.grid()
win.mainloop()
標準ライブラリから一部抜粋
class Font:
"""Represents a named font.
Constructor options are:
font -- font specifier (name, system font, or (family, size, style)-tuple)
name -- name to use for this font configuration (defaults to a unique name)
exists -- does a named font by this name already exist?
Creates a new named font if False, points to the existing font if True.
Raises _tkinter.TclError if the assertion is false.
the following are ignored if font is specified:
family -- font 'family', e.g. Courier, Times, Helvetica
size -- font size in points
weight -- font thickness: NORMAL, BOLD
slant -- font slant: ROMAN, ITALIC
underline -- font underlining: false (0), true (1)
overstrike -- font strikeout: false (0), true (1)
"""
##3.2. Style
style引数に指定している文字列は以下の形式となっている.
識別子.ウィジェットクラス名
識別子は任意の文字列であり,関連付けたウィジェットのスタイルを設定する.
上記のbutton4
とButton5
のように,複数のウィジェットに同じ識別子を関連付けることも可能である.
ウィジェットクラス名は,以下のようにして取得する.
from tkinter import ttk
import tkinter as tk
win = tk.Tk()
button = ttk.Button(win)
button.grid()
print(button.winfo_class())
# TButton
win.mainloop()
上記結果より,ttk.Button()
のウィジェットクラス名は TButton
であることがわかる.
#4. おわりに
深くは記載しない.