grid(網格)布局管理器會將控制項放置到乙個二維的**裡。主控件被分割成一系列的行和列,**中的每個單元(cell)都可以放置乙個控制項。
grid管理器是tkinter裡面最靈活的幾何管理布局器。如果你不確定什麼情況下從三種布局管理中選擇,你至少要保證自己會使用grid。
當你設計對話方塊的時候,grid布局管理器是乙個非常方便的工具。如果你之前使用pack進行布局的話,你會被使用grid後的簡潔而震驚。與適應很多frame來讓pack工作不同,在大多數情況下,你只需要將所有控制項放置到容器中,然後使用grid將它們布局到任何你想要布局的地方。
使用pack進行布局的話,你不得不使用一些額外的frame控制項,而且還需要花費一些功夫讓他們變得好看。如果你使用grid的話,你只需要對每個控制項使用grid,所有的東西都會以合適的方式顯示。
注意:不要試圖在乙個主視窗中混合使用pack和grid。
使用grid進行布局管理非常容易。只需要建立控制項,然後使用grid方法去告訴布局管理器在合適的行和列去顯示它們。你不用事先指定每個網格的大小,布局管理器會自動根據裡面的控制項進行調節。
from tkinter import *
master = tk()
label(master, text="first").grid(row=0)
label(master, text="second").grid(row=1)
e1 = entry(master)
e2 = entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
mainloop()
執行如下圖所示:
label1佔據0行0列,label2佔據1行0列,entry1佔據0行1列,entry2佔據1行1列。
注意:1.在使用grid方法時,如果不指定column引數,則預設從0開始。
2.沒有被使用的行和列號將被忽略,在上面的例子中如果使用10行和20行,則執行效果是一樣的。
預設的空間會在網格中居中顯示。你可以使用sticky選項去指定對齊方式,可以選擇的值有:n/s/e/w,分別代表上/下/左/右。如果你想讓label靠左顯示,你可以設定stricky的值為w。
from tkinter import *
master = tk()
label(master, text="first").grid(row=0, sticky=w)
label(master, text="second").grid(row=1, sticky=w)
e1 = entry(master)
e2 = entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
mainloop()
執行效果如下圖:
下面的**建立了我們最初演示的示意圖:
from tkinter import *
master = tk()
var = intvar()
label(master, text="first").grid(sticky=e)
label(master, text="second").grid(sticky=e)
e1 = entry(master)
e2 = entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
checkbutton = checkbutton(master, text='preserve aspect', variable=var)
checkbutton.grid(columnspan=2, sticky=w)
photo = photoimage(file='2qq.gif')
label = label(image=photo)
label.image = photo
label.grid(row=0, column=2, columnspan=2, rowspan=2, sticky=w+e+n+s, padx=5, pady=5)
button1 = button(master, text='zoom in')
button1.grid(row=2, column=2)
button2 = button(master, text='zoom out')
button2.grid(row=2, column=3)
mainloop()
執行效果如下圖:
在這段**中,有一些細節需要注意:
1. 我們沒有為左邊的兩個label控制項指定具體的位置,在這種情況下,column將會從0開始,而row將會從第乙個沒有使用的值開始。
2. 我們隊checkbutton設定了columnspan引數,所以它會顯示在第二行,並佔據第0和1列。
3. 影象label占用了2行2列,而最後的兩個button都只占用了1列。
關於python中的tkinter模組
python2.7和python3.6中的tkinter是兩個包,不會自動公升級,假如在fedora28做開發的話,錯誤 用import tkinter import tkinter import tkinter 都會失敗,網上的解決辦法 1.yum install python tk 這裡預設安裝...
Python標準庫中的Tkinter模組
python自帶支援tk的tkinter,無需安裝任何包,就可以直接使用。tkinter封裝了訪問tk的介面,tk是乙個圖形庫,支援多個作業系統,使用tcl語言開發。tk會呼叫作業系統提供的本地gui介面,完成最終的gui。先看例子 一 控制項 tkinter的提供各種控制項,如按鈕,標籤和文字框,...
Python的Tkinter去除邊框
from tkinter import class def init self,master none,args,kwargs frame.init self,master,args,kwargs self.grid self.createwidgets self.flag true self.tr...