分頁框(notebook)是一種讓你分頁管理視窗元件的容器,如果你想要做出類似Firefox或IE那種分頁的功能,就會使用到分頁框。這一篇文章的內容說明ttk::notebook的使用方法。
32.1 建立分頁框
以下是一個簡單的例子,它會建立一個分頁框然後再建立一個分頁,並在分頁裡放入一個ttk::treeview元件,程式碼如下:這個程式的1~2行建立一個分頁框元件,4~6行建立一個treeview元件,然後在裡面加入兩個測試用的項目,最後一行使用分頁框的add命令建立一個新的分頁,並把剛剛建立的treeview放在新的分頁裡,後面的-text選項可以用來設定新分頁的文字標題。
這邊有2個重點要注意!! 第一,凡是放在分頁框裡的視窗元件,儘可能以分頁框的path或是Root視窗作為父親,否則在某些情況下放在分頁裡的視窗元件可能會顯示不出來。例如上一個範例treeview的path是.nb.tv,它就是以分頁框的path也就是.nb做為父親。第二,被加入分頁的視窗元件的path可以當做分頁ID,以上面的例子來看分頁1的ID就是.nb.tv,往後如果要刪除或是設定分頁1都要以.nv.tv做為依據。
程式執行的畫面如下:
圖 32-1
事實上真正開發開程式我們不會像上面,把整個treeview放在分頁裡,因為這樣一個分頁就變成只能放一個視窗元件,比較好的做法是像下方的例子,先建立一個空的frame放進分頁,然後再從這個frame上放置其它的視窗元件。
這個例子建立一個空的frame放進第二個分頁裡,然後在這個空的frame裡再加進標籤、文字方塊及按鈕等,三個視窗元件。它執行起來像這樣:
圖 32-2
除了使用add命令來建立分頁之外,也可以使用insert命令,兩者不同的是insert可以指定新分頁的顯示位置。如果把上一個範例的
換成
這樣分頁2就會顯示在分頁1的前面,執行畫面像這樣:
圖 32-3
insert命令後面的位置必需是一個0以上的整數,或是使用end來表示最後一個位置。
32.2 隱藏及刪除分頁
如果你想要暫時隱藏某一個分頁,可以使用分頁框的hide命令,例如想要把上一個例子裡的treeview分頁變隱藏可以這樣:如果要重新顯示的話只要再執行一次add命令就可以了,被隱藏的分頁會重新在之前的位置顯示。
下面是另一個例子,我用兩個按鈕來示範如何顯示及隱藏分頁。
這個程式執行起來像這樣,下方的兩個按鈕可以控制分頁1顯示或隱藏。
圖 32-4
如過你希望移除某一個分頁,可以使用forget命令,例如:
這forget命令會移除放置.nb.tv的分頁。注意哦!! .nb.tv本身並不會被destroy,所以你還是要自己銷毀它,像這樣:
32.3 其它常用的分頁框命令
tabs命令可以用清單的方式取得所有分頁的ID,例如:這個程式的puts會輸出「.nb.tv1 .nb.tv2」,當然你要計算目前有多少分頁的話只要用llength來計算tabs命令的回傳結果就可以了,像這樣:
如果你想要用程式去選取某個分頁,可以用select命令,例如:
這樣的話分頁2就會被選取。如果select命令後面沒有加分頁ID,則可以取得目前選中的分頁ID,例如:
如果你希望修改分頁上的文字標籤或其它選項,可以用tab命令,例如,下方的程式片段會把分頁1的文字標籤改為Tab1。
tab命令也可以用來取得分頁的選項值,例如:
這樣會輸出.nb.tv1分頁的文字標籤。
32.4 其它分頁常用的選項
每一個分頁除了可以指定文字標籤之外,還可以使用-image指定分頁的小圖示,另外-compound選項可以用來指定圖示及文字顯示的相對位置。下面是一個使用的例子:執行的畫面如下分頁1的前面多了一個小圖示。
圖 32-5
另外分頁的-padding選項可以用來調整,放置視窗元件周圍的額外空間,例如:
在下方的執行畫面裡treeview的周圍多了一層的額外空間。
圖 32-6
分頁框也提供了cget及configure等標準的視窗元件命令,它們的用法請參考這一章的說明。
按右上方的「#」號切換側邊欄