核取按鈕和選項按鈕都是供使用者選取項目,但是選項按鈕具有互斥性,因此只能單選。而核取按鈕每個都是可以獨立挑選,彼此間互不影響允許多選。下圖的「選項」對話方塊,其中有三個核取按鈕,按鈕以方塊呈現,每個方塊都是可以獨立勾選或不勾選。

建立核取按鈕的語法如下:
物件變數 = tkinter.Checkbutton (容器物件, [參數1=值1, 參數2=值2, …])
Checkbutton可使用Label提供的參數,下表是Checkbutton所提供常用的參數說明:
| 參數 | 說明 |
|---|---|
command | 核取按鈕狀態改變時會執行 command 所指定的函式。使用方式與按鈕相同。 |
textvariable | 代表核取按鈕的文字物件,用來存取核取按鈕上的文字。使用時必須先透過 tkinter 模組的 IntVar()、DoubleVar()、StringVar()、BooleanVar() 方法定義核取按鈕代表文字物件要使用資料型別。使用方式和文字方塊的 textvariable 相同。 |
variable | 指定核取按鈕的變數,須先透過 tkinter.BooleanVar() 建立,勾選即表示 True,不勾選表示 False。如下寫法,餐點核取方塊選項有 ‘牛肉堡餐’、‘豬肉堡餐’ 和 ‘魚排堡餐’ 選項,預設是 ‘豬肉堡餐’ 和 ‘魚排堡餐’ 核取按鈕被勾選。 v1=tkinter.BooleanVar(value=False)food1=tkinter.Checkbutton(win,text='牛肉堡餐', variable=v1)v2=tkinter.BooleanVar(value=True)food2=tkinter.Checkbutton(win,text='豬肉堡餐', variable=v2)v3=tkinter.BooleanVar(value=True)food3=tkinter.Checkbutton(win,text='魚排堡餐', variable=v3) |
[簡例] (檔名:checkbutton01.py)
建立如下點餐程式。餐點名稱存放在foodAry串列,對應的餐點價錢放在priceAry串列,勾選指定的餐點之後即使用對話方塊顯示所選購的餐點並計算餐點總金額。
foodAry=['牛肉堡餐', '豬肉堡餐', '雞腿堡餐', '香魚堡餐', '招牌堡餐']
priceAry=[120, 110, 130, 90, 150]
[結果]

程式碼:
checkbutton01.pyimport tkinter as tk from tkinter import messagebox as msgbox def fnOk(): data = '' total = 0 for i in isfoodCheckAry: if isfoodCheckAry[i].get() == True: data += foodAry[i] + ", " total += priceAry[i] result = '{0}您好,你選購的餐點為{1},總共{2}元'.format(name.get(), data , total) msgbox.showinfo('點餐結果', result) win = tk.Tk() win.title('核取按鈕範例') win.geometry('500x130') name=tk.StringVar() lblName = tk.Label(win, text='姓名', padx=10, pady=8) lblName.grid(row=0, column=0) txtName = tk.Entry(win, width=10, textvariable=name) txtName.grid(row=0, column=1) lblFood = tk.Label(win, text='餐點', padx=10, pady=8) lblFood.grid(row=1, column=0) isfoodCheckAry={} foodAry=['牛肉堡餐', '豬肉堡餐','雞腿堡餐', '香魚堡餐', '招牌堡餐'] priceAry=[120, 110, 130, 90, 150] for i in range(5): isfoodCheckAry[i] = tk.BooleanVar() tk.Checkbutton(win, text=foodAry[i], variable=isfoodCheckAry[i]).grid(row=1, column=(1+i)) btnOk = tk.Button(win, text='確定', command=fnOk) btnOk.grid(row=2, column=0) win.mainloop()
說明
- 第
4~12行:定義fnOk()函式,此函式內使用迴圈逐一判斷isfoodCheckAry字典中的每一個元素的值是否為True。若為True即表示該項餐點被勾選,就將餐點名稱合併到data變數,並將餐點價錢累加到total變數,最後使用對話方塊顯示點餐結果。- 第
25行: 建立isfoodCheckAry空字典用來存放餐點的核取按鈕的狀態。- 第
26行:建立foodAry串列,串列中的元素用來表示核取按鈕上的文字。- 第
27行:建立priceAry串列,串列中的元素用來表示餐點核取按鈕對應的價格。- 第
28~31行:使用迴圈建立各餐點的核取按鈕。- 第
29行:指定餐點的核取按鈕的值為布林型別。- 第
33行:按下[確定]即執行4~12行的fnOk()函式。
相關主題與延伸閱讀
- 0. 章節索引:本章全部筆記的學習地圖與快速查找。
- 1. tkinter 套件:
tkinter套件的整體介紹與元件總覽。 - 7. Radiobutton 選項按鈕元件:同樣是選項元件,但
Checkbutton可複選、Radiobutton僅能單選,適合對照學習。 - 6. messagebox 對話方塊元件:點餐完成後以對話方塊顯示選購結果與總金額。
- 9. Photoimage 圖片元件:
photoimage01.py範例延續本篇點餐邏輯,改以圖片呈現核取按鈕選項。 - 2. 字典:本篇以字典
isfoodCheckAry儲存每個核取按鈕的勾選狀態。