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

 import tkinter as tk

from tkinter import ttk

from tkinter import colorchooser, filedialog, messagebox


def on_select():

    # コンテナを掃除

    for child in container.winfo_children():

        child.destroy()

    

    name = combo.get()

    

    if name == "カラー選択 (ColorChooser)":

        # ボタンを押すとOSの色選択が開く

        def pick_color():

            color = colorchooser.askcolor(title="色を選んでください")

            if color[1]:

                label_color.config(text=f"選んだ色: {color[1]}", bg=color[1])

        

        btn = tk.Button(container, text="パレットを開く", command=pick_color)

        btn.pack(pady=10)

        label_color = tk.Label(container, text="ここに結果が出ます")

        label_color.pack(pady=10)


    elif name == "ファイル選択 (FileDialog)":

        def open_file():

            path = filedialog.askopenfilename()

            label_path.config(text=f"パス: {path}")


        tk.Button(container, text="ファイルを選ぶ", command=open_file).pack(pady=10)

        label_path = tk.Label(container, text="未選択", wraplength=250)

        label_path.pack(pady=10)


    elif name == "サブウィンドウ (Toplevel)":

        def open_window():

            top = tk.Toplevel(root)

            top.title("Sub Window")

            top.geometry("200x200")

            tk.Label(top, text="これは別ウィンドウです").pack(pady=50)


        tk.Button(container, text="新しい窓を開く", command=open_window).pack(pady=30)


    elif name == "サイズ変更つまみ (Sizegrip)":

        # ウィンドウの右下に配置してサイズ変更を促す

        tk.Label(container, text="右下に注目 ↘").pack(pady=50)

        w = ttk.Sizegrip(container)

        w.pack(side="right", anchor="se")


    container.update()


# --- メイン画面の設定 ---

root = tk.Tk()

root.title("Final Widget Selector")

root.geometry("400x550")


widget_list = [

    "カラー選択 (ColorChooser)",

    "ファイル選択 (FileDialog)",

    "サブウィンドウ (Toplevel)",

    "サイズ変更つまみ (Sizegrip)"

]


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, bg="#FF9800", fg="white").pack()


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

container.pack(pady=20)

container.pack_propagate(False)


root.mainloop()


コメント

このブログの人気の投稿

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

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

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