Tkinter 元件詳解之Checkbutton

Checkbutton(多選按鈕)元件用於實現確定是否選擇的按鈕。Checkbutton 元件可以包含文字或影象,你可以將一個 Python 的函式或方法與之相關聯,當按鈕被按下時,對應的函式或方法將被自動執行。

Checkbutton 元件僅能顯示單一字型的文字,但文字可以跨越多行。另外,還可以為其中的個別字元加上下劃線(例如用於表示鍵盤快捷鍵)。預設情況下,tab 按鍵被用於在按鈕間切換。

何時使用 Checkbutton 元件?

Checkbutton 元件被用於作為二選一的按鈕(通常為選擇“開”或“關”的狀態),當你希望表達“多選多”選項的時候,可以將一系列 Checkbutton 組合起來使用。

但是處理“多選一”的問題,還是交給 Radiobutton Listbox 元件來實現吧。

用法

(參考 Button 元件的用法)

使用 Checkbutton,你必須建立一個 Tkinter 變數用於存放按鈕的狀態:

from Tkinter import *

master = Tk()

var = IntVar()

c = Checkbutton(master, text="我是帥鍋", variable=var)
c.pack()

mainloop()

預設情況下,variable 選項設定為 1 表示選中狀態,反之設定為 0。你可以使用 onvalue 和 offvalue 選項修改它們的值,例如下邊程式碼,只要 var 被設定為“T”即選中狀態,設定為“F”則相反:

var = tk.StringVar()
var.set("T")
c = tk.Checkbutton(root, text="你喜歡Python嗎", variable=var, onvalue="T", offvalue="F")
c.pack()

如果你需要同時跟蹤 variable 選項以及 Checkbutton 元件物件,你不妨可以試試將兩者結合起來(下邊在 CheckButton 元件物件中新建一個 var 變數,存放 variable 的值 v):

v = tk.IntVar()
c = tk.Checkbutton(master, text="加特技", variable=v)
c.var = v

如果你的 Tkinter 程式碼是放在類中的(在實際程式設計中你就應該這麼幹),那麼將 variable 選項的值作為屬性儲存可能是更好的選擇:

def __init__(self, master):
    self.var = tk.IntVar()
    c = tk.Checkbutton(master, text="DUANG~", variable=self.var, command=self.cb)
    c.pack()

def cb(self, event):
    print "variable is", self.var.get()

引數

Checkbutton(master=None, **options) (class) 

master -- 父元件

**options -- 元件選項,下方表格詳細列舉了各個選項的具體含義和用法:

選項 含義
activebackground 1. 設定當 Checkbutton 處於活動狀態(通過 state 選項設定狀態)的背景色
2. 預設值由系統指定
activeforeground 1. 設定當 Checkbutton 處於活動狀態(通過 state 選項設定狀態)的前景色
2. 預設值由系統指定
anchor 1. 控制文字(或影象)在 Checkbutton 中顯示的位置
2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或者 "center" 來定位(ewsn 代表東西南北,上北下南左西右東)
3. 預設值是 "center"
background 1. 設定背景顏色
2. 預設值由系統指定
bg 跟 background 一樣
bitmap 1. 指定顯示到 Checkbutton 上的點陣圖
2. 如果指定了 image 選項,則該選項被忽略
borderwidth 1. 指定 Checkbutton 的邊框寬度
2. 預設值由系統指定,通常是 1 或 2 畫素
bd 跟 borderwidth 一樣
command 1. 指定於該按鈕相關聯的函式或方法
2. 當按鈕被按下時由 Tkinter 自動呼叫對應的函式或方法
3. 如果不設定此選項,那麼該按鈕被按下後啥事兒也不會發生
compound 1. 控制 Checkbutton 中文字和影象的混合模式
2. 預設情況下,如果有指定點陣圖或圖片,則不顯示文字
3. 如果該選項設定為 "center",文字顯示在影象上(文字重疊影象)
4. 如果該選項設定為 "bottom","left","right" 或 "top",那麼影象顯示在文字的旁邊(如 "bottom",則影象在文字的下方)
5. 預設值是 NONE
cursor 1. 指定當滑鼠在 Checkbutton 上飄過的時候的滑鼠樣式
2. 預設值由系統指定
disabledforeground 1. 指定當 Checkbutton 不可用的時候前景色的顏色
2. 預設值由系統指定
font 1. 指定 Checkbutton 中文字的字型
2. 一個 Checkbutton 只能設定一種字型
3. 預設值由系統指定
foreground 1. 設定 Checkbutton 的文字和點陣圖的顏色
2. 預設值由系統指定
fg 跟 foreground 一樣
height 1. 設定 Checkbutton 的高度
2. 如果 Checkbutton 顯示的是文字,那麼單位是文字單元
3. 如果 Checkbutton 顯示的是影象,那麼單位是畫素(或螢幕單元)
4. 如果設定為 0 或者乾脆不設定,那麼會自動根據 Checkbutton 的內容計算出高度
highlightbackground 1. 指定當 Checkbutton 沒有獲得焦點的時候高亮邊框的顏色
2. 預設值由系統指定,通常是標準背景顏色
highlightcolor 1. 指定當 Checkbutton 獲得焦點的時候高亮邊框的顏色
2. 預設值由系統指定
highlightthickness 1. 指定高亮邊框的寬度
2. 預設值是 1
image 1. 指定 Checkbutton 顯示的圖片
2. 該值應該是 PhotoImage,BitmapImage,或者能相容的物件
3. 該選項優先於 text 和 bitmap 選項
indicatoron 1. 指定前邊作為選擇的小方塊是否繪製
2. 預設是繪製的
3. 該選項會影響到按鈕的樣式,如果設定為 False,則點選後該按鈕變成 "sunken"(凹陷),再次點選變為 "raised"(凸起)
justify 1. 定義如何對齊多行文字
2. 使用 "left","right" 或 "center"
3. 注意,文字的位置取決於 anchor 選項
4. 預設值是 "center"
offvalue 1. 預設情況下,variable 選項設定為 1 表示選中狀態,反之設定為 0
2. 設定 offvalue 的值可以自定義未選中狀態的值(詳見上方用法舉例)
onvalue 1. 預設情況下,variable 選項設定為 1 表示選中狀態,反之設定為 0
2. 設定 onvalue 的值可以自定義選中狀態的值(詳見上方用法舉例)
padx 1. 指定 Checkbutton 水平方向上的額外間距(內容和邊框間)
2. 預設值是 1
pady 1. 指定 Checkbutton 垂直方向上的額外間距(內容和邊框間)
2. 預設值是 1
relief 1. 指定邊框樣式
2. 該值通常是 "flat",除非你設定 indicatoron 選項為 False
3. 如果 indicatoron 為 False,你還可以設定 "sunken","raised","groove" 或 "ridge"
selectcolor 1. 選擇框的顏色(就是打勾勾的那個正方形小框框)
2. 預設值由系統指定
selectimage 1. 設定當 Checkbutton 為選中狀態的時候顯示的圖片
2. 如果沒有指定 image 選項,該選項被忽略
state 1. 指定 Checkbutton 的狀態
2. 預設值是 "normal"
3. 另外你還可以設定 "active" 或 "disabled"
takefocus 1. 如果是 True,該元件接受輸入焦點(使用者可以通過 tab 鍵將焦點轉移上來)
2. 預設值是 False
text 1. 指定 Checkbutton 顯示的文字
2. 文字可以包含換行符
3. 如果設定了 bitmap 或 image 選項,該選項則被忽略
textvariable 1. Checkbutton 顯示 Tkinter 變數(通常是一個 StringVar 變數)的內容
2. 如果變數被修改,Checkbutton 的文字會自動更新
underline 1. 跟 text 選項一起使用,用於指定哪一個字元畫下劃線(例如用於表示鍵盤快捷鍵) 
2. 預設值是 -1
3. 例如設定為 1,則說明在 Checkbutton 的第 2 個字元處畫下劃線
variable 1. 將 Checkbutton 跟一個 Tkinter 變數關聯
2. 當按鈕按下時,該變數在 onvalue 和 offvalue 之間切換
3. 這個切換的過程是完全自動的
width 1. 設定 Checkbutton 的寬度
2. 如果 Checkbutton 顯示的是文字,那麼單位是文字單元
3. 如果 Checkbutton 顯示的是影象,那麼單位是畫素(或螢幕單元)
4. 如果設定為 0 或者乾脆不設定,那麼會自動根據 Checkbutton 的內容計算出寬度
wraplength 1. 決定 Checkbutton 的文字應該被分成多少行
2. 該選項指定每行的長度,單位是螢幕單元
3. 預設值是 0

方法

deselect()

-- 取消 Checkbutton 元件的選中狀態,也就是設定 variable 為 offvalue。

flash()

-- 重新整理 Checkbutton 元件,該方法將重繪 Checkbutton 元件若干次(在"active" 和 "normal" 狀態間切換)。

invoke()

-- 呼叫 Checkbutton 中 command 選項指定的函式或方法,並返回函式的返回值。
-- 如果 Checkbutton 的state(狀態)"disabled"是 (不可用)或沒有指定 command 選項,則該方法無效。

select()

-- 將 Checkbutton 元件設定為選中狀態,也就是設定 variable 為 onvalue。

toggle()

-- 切換 Checkbutton 元件的狀態(選中 -> 未選中 / 未選中 -> 選中)。