Tkinterで利用できるフォントファミリーを一覧で表示するスクリプトになります。
実行すると下記画面のようなアプリが出来上がります。

フォントファミリーを表示するスクリプト
import tkinter as tk
import tkinter.font
MAX_BUTTONS_PER_ROW = 5
BUTTON_TEXT = "漢字ひらがな012"
BUTTON_FONT_SIZE = 12
class ScrollableButtonArea:
def __init__(self, root, button_text, max_buttons_per_row, button_font_size):
self.root = root
self.root.state('zoomed') # ウィンドウを最大化
self.canvas = tk.Canvas(root)
self.canvas.pack(side="left", fill="both", expand=True)
self.scrollbar = tk.Scrollbar(root, command=self.canvas.yview)
self.scrollbar.pack(side="right", fill="y")
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.canvas.bind("<Configure>", self.configure_canvas_scroll_region)
self.frame = tk.Frame(self.canvas)
self.canvas.create_window((0, 0), window=self.frame, anchor="nw")
self.font_families = tkinter.font.families() # 利用可能なフォントファミリーのリスト
self.current_column = 0 # 現在の列番号
self.current_row = 0 # 現在の行番号
self.create_buttons(button_text, max_buttons_per_row, button_font_size) # ボタンの生成と配置
def configure_canvas_scroll_region(self, event):
# キャンバスのスクロール領域を設定し、全ての要素を含むようにする
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
def create_buttons(self, button_text, max_buttons_per_row, button_font_size):
for font_family in self.font_families:
button_font = tkinter.font.Font(family=font_family, size=button_font_size) # フォントの設定
button = tk.Button(self.frame, width=20, text=f"{button_text}\n{font_family}", font=button_font) # ボタンの作成
button.grid(row=self.current_row, column=self.current_column, padx=10, pady=10) # ボタンを配置
self.current_column += 1 # 次の列番号に移動
if self.current_column >= max_buttons_per_row: # 最大列数を超えた場合
self.current_column = 0 # 列番号をリセット
self.current_row += 1 # 次の行に移動
if __name__ == "__main__":
root = tk.Tk() # Tkinterウィンドウの作成
app = ScrollableButtonArea(root, BUTTON_TEXT, MAX_BUTTONS_PER_ROW, BUTTON_FONT_SIZE) # スクロール可能なボタンエリアの作成
root.mainloop() # ウィンドウのイベントループを開始
ボタンをクリックするとフォントファミリーをコピーできるバージョン
import tkinter as tk
import tkinter.font
import pyperclip
MAX_BUTTONS_PER_ROW = 5
BUTTON_TEXT = "漢字ひらがな012"
BUTTON_FONT_SIZE = 12
class ScrollableButtonArea:
def __init__(self, root, button_text, max_buttons_per_row, button_font_size):
self.root = root
self.root.state('zoomed')
self.canvas = tk.Canvas(root)
self.canvas.pack(side="left", fill="both", expand=True)
self.scrollbar = tk.Scrollbar(root, command=self.canvas.yview)
self.scrollbar.pack(side="right", fill="y")
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.canvas.bind("<Configure>", self.configure_canvas_scroll_region)
self.frame = tk.Frame(self.canvas)
self.canvas.create_window((0, 0), window=self.frame, anchor="nw")
self.font_families = tkinter.font.families()
self.current_column = 0
self.current_row = 0
self.create_buttons(button_text, max_buttons_per_row, button_font_size)
def configure_canvas_scroll_region(self, event):
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
def create_buttons(self, button_text, max_buttons_per_row, button_font_size):
for font_family in self.font_families:
button_font = tkinter.font.Font(family=font_family, size=button_font_size)
button = tk.Button(
self.frame,
width=20,
text=f"{button_text}\n{font_family}",
font=button_font,
command=lambda family=font_family: self.copy_font_family(family)
)
button.grid(row=self.current_row, column=self.current_column, padx=10, pady=10)
self.current_column += 1
if self.current_column >= max_buttons_per_row:
self.current_column = 0
self.current_row += 1
def copy_font_family(self, font_family):
pyperclip.copy(font_family)
popup = tk.Toplevel()
popup.title("コピー完了")
popup.geometry("200x80")
message = tk.Label(popup, text="フォントファミリーがコピーされました。", padx=20, pady=20)
message.pack()
close_button = tk.Button(popup, text="閉じる", command=popup.destroy)
close_button.pack()
if __name__ == "__main__":
root = tk.Tk()
app = ScrollableButtonArea(root, BUTTON_TEXT, MAX_BUTTONS_PER_ROW, BUTTON_FONT_SIZE)
root.mainloop()