Python

PythonのTkinterのTreeでFontを指定する方法① 【色や取り消し線】

Python

現在、PythonのTkinterを使って表形式のデータを操作するUIアプリを作成しています。

デフォルトのフォントだと少し見た目が良くなかったので、fontの指定方法について調べました。

表のデータ部分のフォント色や背景色を変更する方法については以下にまとめてます。

TkinerのTreeのサンプル

まずはサンプルとして以前に紹介したTreeを使ってみます。

見た目はデフォルトだと以下のような画面です

Pythonのコードは以下のような感じです。

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
root.title("自由なタイトル")
root.geometry("400x200")

tree = ttk.Treeview(root)

# 列を作る
tree["column"] = (1, 2, 3)
tree["show"] = "headings"
# ヘッダー
tree.heading(1, text="列1")
tree.heading(2, text="列2")
tree.heading(3, text="列3")
# 列の幅
tree.column(1, width=100)
tree.column(2, width=200)
tree.column(3, width=100)
# データ追加
tree.insert("", "end", values=("1", "あいうえお", "abcde"))
tree.insert("", "end", values=("2", "かきくけこ", "fghijk"))
tree.insert("", "end", values=("3", "さしすせそ", "lmnop"))

tree.pack(side=tk.TOP, fill=tk.BOTH, expand=1)

root.mainloop()

Tkinerで使えるフォントを確認

それではフォントを変更しますが、はじめにどのようなフォントを使えるか確認してみます。

私の環境はWindowsになりますが、OSによって使えるフォントが異なるかと思います。

使えるフォルトは以下のコードで確認できます。整形のためpprintつかってます。

from tkinter import Tk, font
from pprint import pprint
root = Tk()
pprint(font.families())
> ttest_tkinter_font.py
('System',
 'Terminal',
 'Fixedsys',
 'Modern',
 'Roman',
 'Script',
 'Courier',
 'MS Serif',
 'MS Sans Serif',
 'Small Fonts',
 'Marlett',
 'Arial',
 'Arabic Transparent',
 'Arial Baltic',
 'Arial CE',
 'Arial CYR',
 'Arial Greek',
 'Arial TUR',
 'Arial Black',
 'Bahnschrift Light',
 'Bahnschrift SemiLight',
 'Bahnschrift',
 'Bahnschrift SemiBold',
 'Bahnschrift Light SemiCondensed',
 'Bahnschrift SemiLight SemiConde',
 'Bahnschrift SemiCondensed',
 'Bahnschrift SemiBold SemiConden',
 'Bahnschrift Light Condensed',
 'Bahnschrift SemiLight Condensed',
 'Bahnschrift Condensed',
 'Bahnschrift SemiBold Condensed',
 'Calibri',
 'Calibri Light',
 'Cambria',
 'Cambria Math',
 'Candara',
 'Candara Light',
 'Comic Sans MS',
 'Consolas',
 'Constantia',
 'Corbel',
 'Corbel Light',
 'Courier New',
 'Courier New Baltic',
 'Courier New CE',
 'Courier New CYR',
 'Courier New Greek',
 'Courier New TUR',
 'Ebrima',
 'Franklin Gothic Medium',
 'Gabriola',
 'Gadugi',
 'Georgia',
 'Impact',
 'Ink Free',
 'Javanese Text',
 'Leelawadee UI',
 'Leelawadee UI Semilight',
 'Lucida Console',
 'Lucida Sans Unicode',
 'Malgun Gothic',
 '@Malgun Gothic',
 'Malgun Gothic Semilight',
 '@Malgun Gothic Semilight',
 'Microsoft Himalaya',
 'Microsoft JhengHei',
 '@Microsoft JhengHei',
 'Microsoft JhengHei UI',
 '@Microsoft JhengHei UI',
 'Microsoft JhengHei Light',
 '@Microsoft JhengHei Light',
 'Microsoft JhengHei UI Light',
 '@Microsoft JhengHei UI Light',
 'Microsoft New Tai Lue',
 'Microsoft PhagsPa',
 'Microsoft Sans Serif',
 'Microsoft Tai Le',
 'Microsoft YaHei',
 '@Microsoft YaHei',
 'Microsoft YaHei UI',
 '@Microsoft YaHei UI',
 'Microsoft YaHei Light',
 '@Microsoft YaHei Light',
 'Microsoft YaHei UI Light',
 '@Microsoft YaHei UI Light',
 'Microsoft Yi Baiti',
 'MingLiU-ExtB',
 '@MingLiU-ExtB',
 'PMingLiU-ExtB',
 '@PMingLiU-ExtB',
 'MingLiU_HKSCS-ExtB',
 '@MingLiU_HKSCS-ExtB',
 'Mongolian Baiti',
 'MS Gothic',
 '@MS Gothic',
 'MS UI Gothic',
 '@MS UI Gothic',
 'MS PGothic',
 '@MS PGothic',
 'MV Boli',
 'Myanmar Text',
 'Nirmala UI',
 'Nirmala UI Semilight',
 'Palatino Linotype',
 'Segoe MDL2 Assets',
 'Segoe Print',
 'Segoe Script',
 'Segoe UI',
 'Segoe UI Black',
 'Segoe UI Emoji',
 'Segoe UI Historic',
 'Segoe UI Light',
 'Segoe UI Semibold',
 'Segoe UI Semilight',
 'Segoe UI Symbol',
 'SimSun',
 '@SimSun',
 'NSimSun',
 '@NSimSun',
 'SimSun-ExtB',
 '@SimSun-ExtB',
 'Sitka Small',
 'Sitka Text',
 'Sitka Subheading',
 'Sitka Heading',
 'Sitka Display',
 'Sitka Banner',
 'Sylfaen',
 'Symbol',
 'Tahoma',
 'Times New Roman',
 'Times New Roman Baltic',
 'Times New Roman CE',
 'Times New Roman CYR',
 'Times New Roman Greek',
 'Times New Roman TUR',
 'Trebuchet MS',
 'Verdana',
 'Webdings',
 'Wingdings',
 'Yu Gothic',
 '@Yu Gothic',
 'Yu Gothic UI',
 '@Yu Gothic UI',
 'Yu Gothic UI Semibold',
 '@Yu Gothic UI Semibold',
 'Yu Gothic Light',
 '@Yu Gothic Light',
 'Yu Gothic UI Light',
 '@Yu Gothic UI Light',
 'Yu Gothic Medium',
 '@Yu Gothic Medium',
 'Yu Gothic UI Semilight',
 '@Yu Gothic UI Semilight',
 'HoloLens MDL2 Assets',
 'BIZ UDGothic',
 '@BIZ UDGothic',
 'BIZ UDPGothic',
 '@BIZ UDPGothic',
 'BIZ UDMincho Medium',
 '@BIZ UDMincho Medium',
 'BIZ UDPMincho Medium',
 '@BIZ UDPMincho Medium',
 'Meiryo',
 '@Meiryo',
 'Meiryo UI',
 '@Meiryo UI',
 'MS Mincho',
 '@MS Mincho',
 'MS PMincho',
 '@MS PMincho',
 'UD Digi Kyokasho N-B',
 '@UD Digi Kyokasho N-B',
 'UD Digi Kyokasho NP-B',
 '@UD Digi Kyokasho NP-B',
 'UD Digi Kyokasho NK-B',
 '@UD Digi Kyokasho NK-B',
 'UD Digi Kyokasho N-R',
 '@UD Digi Kyokasho N-R',
 'UD Digi Kyokasho NP-R',
 '@UD Digi Kyokasho NP-R',
 'UD Digi Kyokasho NK-R',
 '@UD Digi Kyokasho NK-R',
 'Yu Mincho',
 '@Yu Mincho',
 'Yu Mincho Demibold',
 '@Yu Mincho Demibold',
 'Yu Mincho Light',
 '@Yu Mincho Light')

フォントを変更してみる

では、フォントを変更してみます。Treeビューでは列名のあたる部分(heading部分)のとコンテンツ部分それぞれでフォントや大きさを変更することができます。

今回はわかりやすくするため、Heading部分のフォントを「Yu Mincho」にして文字サイズも12として少し大きめにして、コンテンツ部分は「Arial」に変更してみました。

コードになりますが、変更部分は見た目の設定を追加しているだけです。

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
root.title("自由なタイトル")
root.geometry("400x200")

tree = ttk.Treeview(root)

style = ttk.Style()
style.configure("Treeview.Heading", font=("Yu Mincho", 12))
style.configure("Treeview", font=("Arial", 10))

# 列を3列作る
tree["column"] = (1, 2, 3)
tree["show"] = "headings"
# ヘッダーテキスト
tree.heading(1, text="列1")
tree.heading(2, text="列2")
tree.heading(3, text="列3")
# 列の幅
tree.column(1, width=100)
tree.column(2, width=200)
tree.column(3, width=100)
# データ挿入
tree.insert("", "end", values=("1", "あいうえお", "abcde"))
tree.insert("", "end", values=("2", "かきくけこ", "fghijk"))
tree.insert("", "end", values=("3", "さしすせそ", "lmnop"))

tree.pack(side=tk.TOP, fill=tk.BOTH, expand=1)

root.mainloop()
import tkinter.font as tkFont
print(list(tkFont.families()))

フォント以外にも変更したい場合

フォント以外にも列の縦幅なども調整できます。

色や取り消し線なども追加することができます。

style = ttk.Style()
style.configure("Treeview.Heading", font=("YU Mincho", 12, "bold", "italic", "underline" ), rowheight=100, foreground="blue")
style.configure("Treeview", font=("Arial", 10, "overstrike"), rowheight=50)

Pythonのオススメ勉強方法

私がオススメするPythonの効果的な学習方法は「Udemy(ユーデミー)」によるビデオ学習です。

「Udemy」は、オンライン学習の提供サイトです。学びたい人は多くある講座の中から受講したいコースを選択することができ、動画で学べるのが特徴です。

多くあるPythonのコースの中でもオススメするPythonのコースは以下となります!!

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

このコースでは合計で28.5時間のビデオ講座があって、それらを受講するだけで、Pythonの基礎から応用まで学ぶことができます。

私も購入して受講していますが、内容としては初心者の方から上級者まで対応する幅広い内容になっています。

下手な書籍を何冊か購入するより、この動画コースを最初からじっくりと受けることで総合的なスキルを習得することができるできます。おそらくこれ以上の教材はないと思いますので、絶対おすすめです。

ちなみに、Udemyでは頻繁にセール(1か月に2,3回程度)が開催されているので、セールのタイミングで購入すれば90%OFFになる講座もあるため、セールが開催されてからの購入をオススメします!

今回は以上となります。

コメント

タイトルとURLをコピーしました