高度なウィジェットセレクター4

 import tkinter as tk

from tkinter import ttk


def on_select():

    for child in container.winfo_children():

        child.destroy()

    

    name = combo.get()

    

    if name == "オプションメニュー (OptionMenu)":

        # 変数と連動する古いスタイルの選択メニュー

        var = tk.StringVar(root)

        var.set("選択肢1")

        w = tk.OptionMenu(container, var, "選択肢1", "選択肢2", "選択肢3")

        

    elif name == "システムアイコン (Bitmap)":

        # Tkinter内蔵のアイコンを表示

        w = tk.Frame(container)

        icons = ["error", "gray75", "info", "questhead", "question", "warning"]

        for icon in icons:

            tk.Label(w, bitmap=icon).pack(side="left", padx=5)

            

    elif name == "ラベル画像 (Image)":

        # ラベルにテキストではなく画像(または文字との併用)を表示

        # ※Pydroidに画像ファイルがない場合を想定し、ドット絵風のデータを作成

        w = tk.Label(container, text="📸 画像エリア", compound="top", 

                     relief="solid", padx=20, pady=20)

        

    elif name == "リアルタイム連動 (Trace)":

        # 入力ボックスに文字を打つと、リアルタイムで下のラベルが変わる

        w = tk.Frame(container)

        var = tk.StringVar()

        var.trace_add("write", lambda *args: label.config(text=f"入力中: {var.get()}"))

        

        entry = tk.Entry(w, textvariable=var)

        entry.pack()

        label = tk.Label(w, text="ここに入力内容が反映されます", fg="blue")

        label.pack(pady=10)


    elif name == "セパレータ(垂直)":

        # 左右を分ける縦線

        w = tk.Frame(container)

        tk.Label(w, text="左").pack(side="left", expand=True)

        ttk.Separator(w, orient="vertical").pack(side="left", fill="y", padx=10)

        tk.Label(w, text="右").pack(side="left", expand=True)


    w.pack(pady=30, padx=20)

    container.update()


# --- メイン設定 ---

root = tk.Tk()

root.title("Ultra Widget Selector")

root.geometry("400x500")


widget_list = [

    "オプションメニュー (OptionMenu)",

    "システムアイコン (Bitmap)",

    "ラベル画像 (Image)",

    "リアルタイム連動 (Trace)",

    "セパレータ(垂直)"

]


combo = ttk.Combobox(root, values=widget_list, state="readonly", font=("Arial", 12))

combo.set("-- さらに他の機能を選択 --")

combo.pack(pady=20)


tk.Button(root, text="生成", command=on_select, width=15).pack()


container = tk.Frame(root, bd=1, relief="groove", width=350, height=250)

container.pack(pady=20)

container.pack_propagate(False)


root.mainloop()


コメント

このブログの人気の投稿

ミライアイ内服薬は薬事法違反で、ほとんど効果がない詐欺ですか?

最高裁での上告理由書受理・却下の判断基準について

裁判官の忌避申立書の作成例