memopy

pythonで作ってみました的なブログ

python tkinter フォント(font)の設定方法

python tkinter フォント(font)の設定方法

tkinterのフォントの設定について整理する。
tkinterでは、フォントタイプ、サイズ、太字、斜体、取消線の設定が可能だ。
参考ページ(英語):http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/fonts.html
f:id:memopy:20170611104952p:plain

フォントオプションの設定

ウィジェットのほとんどで、フォントオプションを設定でき、各項目をタプルで設定する。(familyは必須。それ以外は、オプション)

(family[,size,weight,slant,under,overstrike])
family フォントタイプ
size サイズ
weight "normal":通常(デフォルト)
"bold":太字
slant "roman":通常(デフォルト)
"italic":斜体
underline "normal":通常(デフォルト)
"underline":下線あり
overstrike "normal":通常(デフォルト)
"overstrike":取消線あり
フォントの変更例

※python3で作成(python2ではモジュール名をTkinterとする)

import tkinter as tk
root = tk.Tk()

# familyのみ変更
button1 = tk.Button(root,
                    text="family",
                    font=("System"))
button1.pack()
# sizeのみ変更
button2 = tk.Button(root,
                    text="size",
                    font=("",20))
button2.pack()
# overstrikeのみ変更
button3 = tk.Button(root,
                    text="overstrike",
                    font=("",0,"normal","roman","normal","overstrike"))
button3.pack()

root.mainloop()

f:id:memopy:20170611104952p:plain

フォントオブジェクトによる設定

フォントオブジェクトというものを新規に作成することもできる。
※python3で作成

import tkinter as tk
import tkinter.font as font

root = tk.Tk()

# my_fontというフォントオブジェクトを新規に作成
my_font = font.Font(root,family="System",size=20,weight="bold")

# fontオプションでmy_fontを設定する
button = tk.Button(root,text="font",font=my_font)
button.pack()

root.mainloop()

※python2ではモジュール名を以下のようにする

import Tkinter as tk
import tkFont as font

f:id:memopy:20170611110135p:plain

tkinterで使用可能なフォントタイプ(family)の確認方法

font.familiesメソッドで確認できる
※python3で作成(python2では前述のとおりモジュール名を変更する)

# -*- coding:utf-8 -*-
import tkinter as tk
import tkinter.font as font

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

コンソール上に、現在の環境で使用可能なフォントタイプ(family)が表示される。

おまけ

colorの設定でも同じことをやったが、fontでもやってみた。
f:id:memopy:20170611112406p:plain
※python3で作成

# -*- coding:utf-8 -*-
import tkinter as tk
import tkinter.font as font

class FontChart(tk.Frame):

    MAX_ROWS = 36
    FONT_SIZE = 8

    def __init__(self, root):
        tk.Frame.__init__(self, root)
        r = 0
        c = 0

        for color in FONTS:
            label = tk.Label(self, text=color,
                             font=(color, self.FONT_SIZE, "bold"))
            label.grid(row=r, column=c, sticky="ew")
            r += 1

            if r > self.MAX_ROWS:
                r = 0
                c += 1

        self.pack(expand=1, fill="both")


if __name__ == '__main__':
    root = tk.Tk()
    root.title("Named Font Chart")
    FONTS = list(font.families(root))
    app = FontChart(root)
    root.mainloop()

なお、ttkのfontについては、styleで変更しなければならない。
ttk Treeview Headingのfontを変更する方法 - memopy