#

雖然說我們已經在之前的章節說明過核取方塊了,但說真的之前只是很粗略的介紹而以,所以我希望在這個章節多補充一些關於它的使用方法。我們會再次看到核取方塊的基本用法,當然也會多一些之前沒有的內容。

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等標準的視窗元件命令,它們的用法請參考這一章的說明。

Theme Design by devolux.org. Converted by Wordpress To Blogger for WP Blogger Themes. Sponsored by iBlogtoBlog
This template is brought to you by : allblogtools.com | Blogger Templates