這一篇文章介紹Tk建立功能選單的命令,內容包含建立功能選單列(menubar)、快顯功能選單(popupmenu)等,然後再依序說明如何在這些選單上加入命令、核取方塊、圓鈕方塊及子選單等項目。
34.1 建立功能選單列
在Tk裡每一個用toplevel命令建立的視窗及root視窗都可以指定一個功能選單列,如下示範建立功能選單列方法,並且把功能選單列指定給root視窗:程式第1行的menu命令建立了一個選單,而且指定他的類型是功能選單列(menubar),-type可以指定的類型有menubar、tearoff及normal,其中tearoff指的是要建立一個可以分割的選單,這種選單上會有一條分割線,若使用者按下分割線選單就會由功能選單列脫離,並且變成一個新的視窗。
程式的第3~4行用.mbar的add命令加入「檔案」及「編輯」等兩個用來串接選單的項目,最後一行再用root視窗的configure命令把.mbar指定給自己。
這個程式執行起來像下面的圖,功能選單列上會有檔案及編輯兩個項目,但由於程式沒有指定對應的下拉選單給它們,所以執行的時候,不管你怎麼按都不會有選單跳出來。
圖 34-1
接下來我們要幫「檔案」這個項目加上下拉選單,下拉選單的建立方法也是使用menu命令,只是這次不需要指定-type。
程式的第2行建立了第2個選單,然後在第4行用-menu選項把它指定給「檔案」項目作為下拉選單。程式的第7~9行使用選單的add命令建立了2個命令(command)項目及一個分隔線(separator)項目。-label選項用來指定顯示在項目上的文字,-command用來指定按下選單項目要執行的命令。
它執行的畫面如下,由於這次我們幫「檔案」串接了下拉選單,所以按下「檔案」選單就跳出來了。
圖 34-2
若你按一下分割線,menu就會變成一個獨立的視窗:
圖 34-3
若你不喜歡分割線的話建立menu時指定-tearoff 0這樣就不會顯示分割線了,像這樣:
我們也可以用add cascade幫.mbar.file建立更下一層的子選單,例如:
程式的第3行再建立一個新的選單,然後在第10行用add cascade把它串接給「子選單」項目做為它的下拉選單。它的執行畫面如下:
圖 34-4
依此類推我們就可以建立第4層、第5層...的子選單。
34.2 調整選單項目的外觀
除了可以用-label來指定選單項目要顯示的文字之外,我們還可以用-image及-compound來指定選單項目上要顯示的圖示,它們的使用方法和第17章 button所說的是一樣的,例如:程式的第9行我載入了exit.gif圖檔並指定給「離開」項目,而且exit圖示要放在文字的左邊。執行畫面如下:
圖 34-5
如果想要做更多的變化還可以調整選單項目的顏色及文字的字型,例如:
請看到程式的8~12行,-background用來指定選單項目的背景顏色,-foreground用來指定前景(文字)的顏色,-active開頭的兩個選項用來指定滑鼠移過時的背景及前景顏色,最後-font用來指定項目上文字的字型。執行畫面如下:
圖 34-6
當滑鼠移經「第二層」項目時就變成這樣:
圖 34-7
34.3 核取方塊及圓鈕方塊選項
Tk的menu也允許你放上核取方塊(checkbutton)及圓鈕方鈕(radiobutton),它們的原理和使用方法和一般的checkbutton及radiobutton是類似的,只是變成放在選單項目上,加入核取方塊的範例如下:程式的9~11行建立了3個核取方塊,並且用::chkvar1到::chkvar3記錄各別的勾選狀態,-onvalue後面的1是勾選時要儲存到對應的::chkvarX的值,反之取消勾選時-offvalue後面的0會被存到::chkvarX,-command後面的程式會在勾選狀態改變時執行。它的執行畫面如下,在 「第2層」及「離開」的中間多了3個核取方塊的項目。
圖 34-8
加入圓鈕方塊的示範如下:
程式的9~10行建立了2個圓鈕方塊,並用::rdovar記錄圓鈕方塊的選取狀態,-value後面的值是圓鈕方塊被選中時要儲存在::rdovar變數的值,-command後面的程式會在圓鈕方塊被點選時執行。
它的執行畫面如下:
圖 34-9
34.4 快顯功能選單
建立快顯功能選單和建立功能選單列的下拉選單是一模一樣的,唯一的不同只有在於快顯功能選單是在特定的視窗元件上按滑鼠右鍵才顯示,而且要指定顯示的X,Y座標,以下是一個簡單的例子,這個例子建立一個entry視窗元件,然後在entry上按滑鼠右鍵時會顯示清除的功能。這個程式的重點在於最後一行,.txt綁定了一個Button-3(滑鼠右鍵)的事件,然後使用tk_popup命令把.txt.m選單顯示在坐標(%X,%Y)的位置。在程式真正執行的時候%X及%Y會被bind命令代換為滑鼠指標在螢幕上的真實座標。注意哦!! 如果你是使用Mac的系統,也許要把Button-3換成Button-2。
程式的執行畫面如下:
圖 34-10
按右上方的「#」號切換側邊欄