最近學了 Python Tkinter 程式庫,可以將程式提供圖形化的使用者介面(GUI: Graphic User Interface)。有個作業的練習題目是這樣出的:請設計出以上的圖形化界面。剛好可以應用 Tkinter 程式庫的排版方式。

 

3_grid_GUI.png

 

第一版程式:.pack()

我們第一種學到的 Tkinter 排版法則是 .pack()
當元件創造出來後,就要用排版方式將元件排進圖形介面上。
以下是第一版的作法:

Title_label.pack()
schoollot_label.pack()
schoollot_entry.pack()

name_label.pack()
name_entry.pack()

TC_label.pack()
TC_entry.pack()

 

1_pack_GUI.png

 

元件都創造出來了!但是和我們的要求不大對。學號、姓名、國文應該都在輸入的左邊,而不是上面。
其實,就程式來說是正確的。因為 .pack() 是由上排到下方。但是 .pack() 裡面還有一個 side= 屬性,可以設定元件彼此的相關位置。所以,我們再來看第二版。

第二版:.pack(side=tk.LEFT)

Title_label.pack()
schoollot_label.pack(side=tk.LEFT)
schoollot_entry.pack(side=tk.LEFT)

name_label.pack(side=tk.LEFT)
name_entry.pack(side=tk.LEFT)

TC_label.pack(side=tk.LEFT)
TC_entry.pack(side=tk.LEFT)

2_pack_side_tk_LEFT_GUI.png

看起來可以,但是學號、姓名、國文都在同一行。我們希望可以換行。.pack() 裡面還一個 tk.BUTTOM 屬性,可以再試第三版。

 

第三版:tk.LEFT 和 tk.BUTTOM 一起用

Title_label.pack()
schoollot_label.pack()
schoollot_entry.pack(side=tk.LEFT)

name_label.pack(side=tk.BOTTOM)
name_entry.pack(side=tk.LEFT)

TC_label.pack(side=tk.BOTTOM)
TC_entry.pack(side=tk.LEFT)

 

2_pack_side_tk_BOTTOM_GUI_error.png

 

本以為可以達到換行的目的,看起來並不行。

最後一版:改換排版方式:.grid()

除了 .pack() 以外,tkinter 還有另外一種排版方式:.grid()
可以讓我們以二維陣列的方式來放置圖形元件。
仔細地看一下第一章要求的圖形:除了第一行字以外,其餘的都是左邊、右邊各一個元件。使用方式也很簡單:.grid(row=行數字,column=列數字)
而且行是由 0 開始計算。所以我們的程式就改成這樣:

Title_label.grid(row=0,column=0,columnspan=2)
schoollot_label.grid(row=1,column=0)
schoollot_entry.grid(row=1,column=1)

name_label.grid(row=2,column=0)
name_entry.grid(row=2,column=1)

TC_label.grid(row=3,column=0)
TC_entry.grid(row=3,column=1)

3_grid_GUI.png

這裡只有第一行的文字要多一個參數;成績建檔系統,要將一列延伸到兩列,所以要多加一個參數:columnspan=2

文章標籤
全站熱搜
創作者介紹
創作者 小木屋 的頭像
小木屋

小木屋

小木屋 發表在 痞客邦 留言(0) 人氣(1,771)