2025年3月7日 星期五

完整 Tkinter GUI 範例

 這裡是包含 FrameCheckbuttonRadiobuttonListbox 的完整 Tkinter 例子,展示如何組織這些元件並讓它們互動。


完整 Tkinter GUI 範例

這個程式會: ✅ 使用 Frame 來組織 UI
✅ 添加 Checkbutton 來讓使用者選擇選項
✅ 添加 Radiobutton 來選擇單一選項
✅ 使用 Listbox 來顯示多個選擇

import tkinter as tk
from tkinter import messagebox

# 建立主視窗
root = tk.Tk()
root.title("Tkinter Frame, Checkbutton, Radiobutton, Listbox 範例")
root.geometry("400x400")

# 創建 Frame 容器
frame = tk.Frame(root, padx=10, pady=10, relief="groove", borderwidth=2)
frame.pack(pady=10)

# **Checkbutton**
def show_check():
    selected_options = [var1.get(), var2.get()]
    messagebox.showinfo("勾選框選擇", f"你選擇了: {', '.join([x for x in selected_options if x])}")

tk.Label(frame, text="請選擇你的興趣:", font=("Arial", 12)).pack(anchor="w")

var1 = tk.StringVar()
var2 = tk.StringVar()

check1 = tk.Checkbutton(frame, text="音樂", variable=var1, onvalue="音樂", offvalue="")
check2 = tk.Checkbutton(frame, text="運動", variable=var2, onvalue="運動", offvalue="")
check1.pack(anchor="w")
check2.pack(anchor="w")

btn_check = tk.Button(frame, text="確認選擇", command=show_check)
btn_check.pack(pady=5)

# **Radiobutton**
def show_radio():
    messagebox.showinfo("單選按鈕選擇", f"你選擇了: {radio_var.get()}")

tk.Label(root, text="請選擇你的性別:", font=("Arial", 12)).pack()

radio_var = tk.StringVar(value="男")  # 預設選項
radio1 = tk.Radiobutton(root, text="男", variable=radio_var, value="男")
radio2 = tk.Radiobutton(root, text="女", variable=radio_var, value="女")
radio1.pack()
radio2.pack()

btn_radio = tk.Button(root, text="確認選擇", command=show_radio)
btn_radio.pack(pady=5)

# **Listbox**
def show_listbox():
    selected_items = [listbox.get(i) for i in listbox.curselection()]
    messagebox.showinfo("清單框選擇", f"你選擇了: {', '.join(selected_items)}")

tk.Label(root, text="請選擇你的最愛食物:", font=("Arial", 12)).pack()
listbox = tk.Listbox(root, selectmode=tk.MULTIPLE)
foods = ["Pizza", "壽司", "牛排", "炸雞", "沙拉"]
for food in foods:
    listbox.insert(tk.END, food)
listbox.pack()

btn_listbox = tk.Button(root, text="確認選擇", command=show_listbox)
btn_listbox.pack(pady=5)

# 進入主迴圈
root.mainloop()

程式功能解釋

  1. Frame

    • frame = tk.Frame(root, padx=10, pady=10, relief="groove", borderwidth=2)
    • Frame 主要用來包裝 Checkbutton 這部分,增加邊框,組織 UI 佈局。
  2. Checkbutton

    • Checkbutton 可多選,使用 StringVar() 來存放狀態值。
    • onvalue 設定為選擇時的值,offvalue 設定為未選擇時的值。
    • messagebox.showinfo() 會顯示選擇結果。
  3. Radiobutton

    • 只允許單選,使用 StringVar() 存放值。
    • 預設 radio_var = tk.StringVar(value="男")
    • 當使用者點擊「確認選擇」按鈕時,會彈出選擇的內容。
  4. Listbox

    • 使用 selectmode=tk.MULTIPLE 允許多選。
    • curselection() 取得所有被選取的索引,然後用 .get() 取出值。
    • 按下按鈕時,會顯示選擇的清單項目。

這個範例展示了 Frame、Checkbutton、Radiobutton 和 Listbox 的基本用法,適合用來建立簡單的表單、偏好設定選單等。你可以根據需求擴展,如加入 Entry 輸入框或 Scrollbar 捲軸來提升體驗。

你想在這個範例中加入更多功能嗎? 🚀

沒有留言:

張貼留言