3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python3 Tkinter フォント設定

Last updated at Posted at 2020-12-03

#1. はじめに

今回はTkinterのフォント設定方法について記載する.
tkinterとttkのウィジェットで指定方法が異なるため,両方の設定方法を以下にまとめる.

#2. ソースコード

tkinterとttkのウィジェットで,font引数がある場合はそれを使って指定する.
ttkのウィジェットのうち,font引数がない場合はstyle引数を使って指定する.

下記のプログラムは,Button1を押すとウィジェットの文字サイズを拡大,Button2を押すとウィジェットの文字サイズを縮小する.

test.py
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クラスを参照すると良い.

test.py
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()

標準ライブラリから一部抜粋

/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/font.py
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引数に指定している文字列は以下の形式となっている.

識別子.ウィジェットクラス名

識別子は任意の文字列であり,関連付けたウィジェットのスタイルを設定する.
上記のbutton4Button5のように,複数のウィジェットに同じ識別子を関連付けることも可能である.
ウィジェットクラス名は,以下のようにして取得する.

test.py
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. おわりに
深くは記載しない.

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?