雖然說我們已經在之前的章節說明過核取方塊了,但說真的之前只是很粗略的介紹而以,所以我希望在這個章節多補充一些關於它的使用方法。我們會再次看到核取方塊的基本用法,當然也會多一些之前沒有的內容。
27.1 建立核取方塊
在ttk裡我們可以透過::ttk::checkbutton命令來建立方塊,例如下面的程式:001 002 | ::ttk::checkbutton .chk -text "按一下" -offvalue 0 -onvalue 1 -variable ::value pack .chk |
上面的程式會建出1個核取方塊,-text用來設定顯示在核取方塊後的說明文字,-offvalue及-onvalue後面都可以是任意型式的數值或是字串,當使用者在把核取方塊打勾,-onvalue後面的值會被自動的儲存到::value變數裡,反之如果取消打勾-offvalue後面的數值就被儲存在::value變數裡。-variable後面可以指定一個變數的名稱,就如剛剛所說的指定在-variable後面的變數會即時反應核取方塊的狀態。
圖 27-1
這邊還有一另個重點,若建立核取方塊時-variable後面的變數是不存在的,這樣的話核取方塊會顯示成「alternate」狀態,即「供選取」狀態也就是使用者還沒有對核取方塊做任何操作的意思。在這個例子裡,我們並沒有預先設定::value變數的值,所以它會顯示成alternate狀態。
現在請大家想想,如果多個核取方塊的-variable都指定了相同的變數,那會有什麼情況發生? 像這面的例子:
001 002 003 | ::ttk::checkbutton .chk1 -text "打勾方塊1" -offvalue 0 -onvalue 1 -variable ::value ::ttk::checkbutton .chk2 -text "打勾方塊2" -offvalue 0 -onvalue 1 -variable ::value pack .chk1 .chk2 |
這個例子讓兩個核取方塊產生了同步的效果,也就是對其中一個方塊打勾另一個方塊也會跟著變動,這樣看起來好像很好玩,不過事實上我們很少這麼使用,所以大家知道會有這樣的效果就好。
□ 把玩核取方塊
接下來讓我們看一個範例程式,這個程式會用上核取方塊大部份的功能,你玩一下應該就知道核取方塊該如何使用了。它長得像這樣:圖 27-2
圖上的「查看狀態」每按一下都會輸出核取方塊目前的狀態。而其它的3個按鈕可以分別用來設定核取方塊的狀態,這是一種透過程式去控制核取方塊狀態的方法。 程式碼如下:
001 002 003 004 005 006 007 008 009 010 011 | set ::value 1 ttk::checkbutton .chk -text "check1" -onvalue 1 -offvalue 0 -variable ::value ttk::button .btnCheck -text "查看狀態" -command {puts $::value} ttk::button .btnOn -text "On" -command {set ::value 1} ttk::button .btnOff -text "Off" -command {set ::value 0} ttk::button .btnAlt -text "Alternate" -command {unset ::value} grid .chk - - - grid .btnCheck .btnOn .btnOff .btnAlt |
我想這邊只有一個地方要提醒,第一個grid後面的.chk - - -是表示.chk要佔用4格,也就是說「-」表示為前一個視窗元件的延伸。
□ 其它常用選項
以下是其它常用的選項,有興趣的朋友請自己試看看吧!!-command | 指定核取狀態變更時要執行的程式。 |
-image | 設定核取方塊後面的圖示。 |
-compound | 指定圖示及文字內容的排列方式。 |
-textvariable | 這個選項可以指定一個變數來即時反應方塊後面的文字內容。 |
核取方塊也可供了cget及configure等標準的視窗元件命令,它們的用法請參考這一章的說明。
按右上方的「#」號切換側邊欄