CodeGym /課程 /Python SELF TW /處理勾選框、單選按鈕和切換器

處理勾選框、單選按鈕和切換器

Python SELF TW
等級 50 , 課堂 2
開放

1. 勾選框 (Checkbutton)

勾選框是一個小方框,用戶可以選擇勾選或取消勾選。它可以用來讓用戶從提供的選項中選擇一個或多個。

創建勾選框

可以使用 Checkbutton 小部件來創建勾選框。為了追蹤勾選框的狀態(是否被勾選),通常會使用 IntVar 類型的變數。該變數的值為 1 表示已勾選,為 0 表示未勾選。

Python
import tkinter as tk

# 檢查勾選框狀態的函數
def show_status():
    print("開啟" if var.get() == 1 else "關閉")

# 創建窗口
root = tk.Tk()
root.title("勾選框範例")

# 用於記錄狀態的變數
var = tk.IntVar()

# 勾選框與變數 var 綁定
checkbox = tk.Checkbutton(root, text="啟用選項", variable=var, command=show_status)
checkbox.pack(pady=20)

root.mainloop()

程式碼解釋

  • variable=var: 將勾選框綁定到變數 var,以便在勾選框狀態改變時更新其值。
  • 函數 show_status(): 顯示勾選框當前的狀態。如果勾選框被勾選,則輸出 "開啟",否則輸出 "關閉"。

使用多個勾選框

如果需要多個獨立選項,可以創建多個勾選框,每個勾選框綁定到不同的變數。

Python
# 狀態變數
option1 = tk.IntVar()
option2 = tk.IntVar()

# 勾選框
check1 = tk.Checkbutton(root, text="選項 1", variable=option1)
check2 = tk.Checkbutton(root, text="選項 2", variable=option2)
check1.pack()
check2.pack()

2. 單選按鈕 (Radiobutton)

單選按鈕是一組圓形按鈕,用戶只能選擇其中之一。當需要讓用戶從多個選項中選擇一個時非常有用。

創建單選按鈕

可以使用 Radiobutton 小部件來創建單選按鈕。為了使按鈕之間的選擇互相關聯,所有按鈕應該綁定到相同的變數(IntVarStringVar)。

Python
# 顯示所選選項的函數
def show_choice():
    print(f"選擇了選項 {choice.get()}")

# 用於記錄選擇的變數
choice = tk.IntVar()

# 單選按鈕
radio1 = tk.Radiobutton(root, text="選項 1", variable=choice, value=1, command=show_choice)
radio2 = tk.Radiobutton(root, text="選項 2", variable=choice, value=2, command=show_choice)
radio3 = tk.Radiobutton(root, text="選項 3", variable=choice, value=3, command=show_choice)

radio1.pack()
radio2.pack()
radio3.pack()

程式碼解釋

  • variable=choice: 將所有單選按鈕綁定到同一個變數 choice,以實現它們的互動聯繫。
  • value: 定義當用戶選擇該按鈕時,變數 choice 的值。
  • 函數 show_choice(): 顯示當前選擇的選項。

單選按鈕與文字值

單選按鈕也可以與 StringVar 類型的變數綁定,使用文字作為值。

Python
# 用於記錄文字選擇的變數
color_choice = tk.StringVar()

# 單選按鈕與文字值
radio_red = tk.Radiobutton(root, text="紅色", variable=color_choice, value="Red")
radio_blue = tk.Radiobutton(root, text="藍色", variable=color_choice, value="Blue")
radio_green = tk.Radiobutton(root, text="綠色", variable=color_choice, value="Green")

radio_red.pack()
radio_blue.pack()
radio_green.pack()

3. 切換器 (Spinbox)

切換器允許用戶從一個範圍內選擇數值。這個小部件對於輸入數值(如年齡或數量)特別實用。

創建切換器

在 Tkinter 中,可以使用 Spinbox 小部件創建切換器,用戶可以通過箭頭或手動輸入來選擇值。

Python
# 顯示所選數值的函數
def show_spin_value():
    print(f"值: {spin.get()}")

# 從 1 到 10 的切換器
spin = tk.Spinbox(root, from_=1, to=10, command=show_spin_value)
spin.pack(pady=20)

程式碼解釋

  • from_to: 定義切換器的值範圍。
  • 函數 show_spin_value(): 每次值改變時,顯示當前選擇的值。

調整步長和值

使用參數 increment 設置切換器的步長,使用 values 設置具體值。

Python
# 步長為 2 的切換器
spin_step = tk.Spinbox(root, from_=0, to=20, increment=2)
spin_step.pack(pady=5)

# 使用指定值的切換器
spin_values = tk.Spinbox(root, values=("小", "中", "大"))
spin_values.pack(pady=5)

4. 範例應用程序

包含勾選框、單選按鈕和切換器的範例應用程序

現在將以上內容結合起來,創建一個包含勾選框、單選按鈕和切換器的介面,讓用戶選擇多項選項並查看結果。

Python
import tkinter as tk

# 創建主窗口
root = tk.Tk()
root.title("勾選框、單選按鈕和切換器範例")
root.geometry("300x300")

# 顯示選擇的函數
def show_selections():
    selections = []
    selections.append(f"勾選框狀態: {'是' if option.get() == 1 else '否'}")
    selections.append(f"選中的顏色: {color_choice.get()}")
    selections.append(f"數量: {spin.get()}")
    message_label.config(text="\n".join(selections))

# 勾選框
option = tk.IntVar()
checkbox = tk.Checkbutton(root, text="啟用選項", variable=option)
checkbox.pack(pady=5)

# 單選按鈕
color_choice = tk.StringVar(value="紅色")
tk.Label(root, text="選擇顏色:").pack()
radio_red = tk.Radiobutton(root, text="紅色", variable=color_choice, value="紅色")
radio_blue = tk.Radiobutton(root, text="藍色", variable=color_choice, value="藍色")
radio_green = tk.Radiobutton(root, text="綠色", variable=color_choice, value="綠色")
radio_red.pack()
radio_blue.pack()
radio_green.pack()

# 切換器
tk.Label(root, text="數量:").pack()
spin = tk.Spinbox(root, from_=1, to=10)
spin.pack(pady=5)

# 顯示所選值的按鈕
show_button = tk.Button(root, text="顯示選擇", command=show_selections)
show_button.pack(pady=10)

# 用於顯示結果的標籤
message_label = tk.Label(root, text="", justify="left")
message_label.pack(pady=5)

root.mainloop()

完整範例的解釋

  • 勾選框: 讓用戶啟用或禁用某個選項。
  • 單選按鈕: 讓用戶從三種顏色中選擇一種。
  • 切換器: 允許用戶選擇 1 到 10 的數字。
  • 按鈕 "顯示選擇": 顯示所有選項的當前狀態,並更新到標籤 message_label
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION