#

圓鈕方塊是一種讓使用者多選一,而且確保選項間互斥的視窗元件。這一個章節介紹圓鈕方塊的建立及使用方法。另外為了慶祝剛裝好的ubuntu 9.10,所以這次程式範例都改成了Ubuntu下的快照,呵呵。

28.1 建立圓鈕方塊

在建立圓鈕方塊之前,我們要先說明一個「分組」的觀念,其意義就是,如果多個圓鈕方塊被分類在同一組,那麼Tk會確保同一組的圓鈕方塊中永遠只有一個會被選中。下面是一個建立方塊及分組的例子:

001
002
003
ttk::radiobutton .r1 -text "男生" -value 1 -variable ::sex
ttk::radiobutton .r2 -text "女生" -value 0 -variable ::sex
pack .r1 .r2

這個例子總共建立了2個圓鈕方塊,如果使用者點選了男生,那麼::sex變數會被設定為1(男生後面-value指定的值),如果選了女生::sex會被設定為0(女生後面-value指定的值)。這邊的重點在於,如果多個圓鈕方塊的-variable選項指定了相同的變數名稱,這樣的話Tk會自動把這些圓鈕方塊分為一組,然後確保使用者只能在這些圓鈕方塊中選中1個。所以這個例子執行起來就像下面的圖一樣,使用者永遠只能在兩個圓鈕中點選其中之一。

圖 28-1


注意哦!!如果沒有設定::sex的初始值,那麼初始的情況下沒有任何一個圓鈕會被選中的。如果你希望把女生當為預設值的話,可以這樣做:

001
002
003
004
set ::sex 0
ttk::radiobutton .r1 -text "男生" -value 1 -variable ::sex
ttk::radiobutton .r2 -text "女生" -value 0 -variable ::sex
pack .r1 .r2

很簡單只要把::sex設定為0就可以了。想當然的,如果把::sex設定為1,這樣的話預設值就會變為男生。

□ 使用範例

現在我們用一個簡單的例子來說明圓鈕方塊的使用方法,這個例子長得像下面的樣子:

圖 28-2


圖上的「查看狀態」每按一下就會輸出圓鈕方塊選中的項目值。而「回復初值」會把圓鈕方塊還原為原始的選取狀態。程式碼如下:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
ttk::label .lbl1 -text "你的性別是:"
ttk::radiobutton .rdo1 -text "男生" -value 1 -variable ::sex
ttk::radiobutton .rdo2 -text "女生" -value 0 -variable ::sex

ttk::label .lbl2 -text "最愛的程式語言是:"
ttk::radiobutton .rdo3 -text "Tcl" -value 1 -variable ::lang
ttk::radiobutton .rdo4 -text "踢扣" -value 2 -variable ::lang

ttk::button .btn1 -text "查看狀態" -command {
 puts "性別:$::sex"
 puts "語言:$::lang"
}

ttk::button .btn2 -text "回復初值" -command {
 set ::sex 1
 set ::lang 2 
}

set ::sex 1
set ::lang 2 

grid .lbl1 .rdo1 .rdo2 -sticky "news" -padx 2 -pady 2
grid .lbl2 .rdo3 .rdo4 -sticky "news" -padx 2 -pady 2
grid .btn1 .btn2 -sticky "news" -padx 2 -pady 2

正常的情況下你應該看得懂上面的每一行程式,如果你覺得有陌生的地方,請試試複習先前的文章。

□ 其它常用選項

以下是其它常用的選項,有興趣的朋友請自己試看看吧!!

-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