Tkinterで使用できるフォントファミリーを表示させるスクリプトの紹介

Tkinterで使用できるフォントファミリーを表示させるスクリプトの紹介

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()
 data-src=

プログラミング情報サイト「In-Output」

当サイトではプログラミング言語の情報を発信しています。
HTMLやCSSのマークアップ言語の学習方法や解説、WordPressでのサイト開設方法、python等のプログラミング言語を使用して日頃の作業の効率化等、皆様のお役に立てるサイトを目指しています。

CTR IMG