Tkinter の theme の利用

Tkinter のテーマの利用

Tk 8.5 からテーマ付きウィジェット (Tk themed widget) が導入されました。テーマ付きウィジェットは ttk.Button、ttk.Label などのように、ttk.* で始まるクラス名になります。

テーマを設定することによって、自動的に表示形式が切り替わるので、統一されたルックアンドフィールを実現することが容易になります。

現在の環境で利用可能なテーマの一覧表示

スタイルオブジェクトの theme_names() 関数は現在利用できるテーマの一覧を返します。

>>> from tkinter import ttk
>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'clam', 'alt', 'default', 'classic')
>>> 

ビルトインテーマは alt, aqua, clam, classic, default です。Windows ではさらに vista, winnative, xpnative があります。

ttk ビルトインテーマを利用する

ビルトインテーマは ttk.Style()theme_use() メソッドにテーマの名前を渡すことで設定できます。

例えば classic テーマを適用するには次のようにします。

from tkinter import *
from tkinter import ttk

root = Tk()
# Style
s = ttk.Style()
s.theme_use('classic')

明示的に設定しなくとも、テーマは環境によってデフォルトで設定されています。 例えば Mac でのデフォルトのテーマは aqua です。

ttkthemes を利用する

次のコマンドで追加のテーマをインストールすることができます。

pip install ttkthemes

ThemedTk() を利用してテーマを設定することができます。

from tkinter import *
from tkinter import ttk
from ttkthemes import *

root = ThemedTk()
root.title('My First App')
root.minsize(width=400, height=100)

s = ttk.Style()
s.theme_use('black')

# Create Widgets
frame1 = ttk.Frame(root, padding=10)
label1 = ttk.Label(frame1, text='Your name:')
t = StringVar()
entry1 = ttk.Entry(frame1, textvariable=t)
button1 = ttk.Button(
    frame1,
    text='OK',
    command=lambda: print('Hello, %s.' % t.get()))

# Grid
frame1.grid(row=0, column=0, sticky=(N, W, S, E))
label1.grid(row=0, column=0, sticky=E)
entry1.grid(row=0, column=1, sticky=(E, W))
button1.grid(row=1, column=1, sticky=W)

# Set Padding
for child in frame1.winfo_children():
    child.grid_configure(padx=5, pady=5)

# Set Grid Weight
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
frame1.columnconfigure(1, weight=1)

# Window Position
root.geometry("+300+200")

# Start App
root.mainloop()

これを実行すると、次のような画面が表示されます。

Tkinter black theme

black テーマが適用され背景色が黒っぽく表示されています。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門