python中Tkinter的布局管理器Grid

2021-09-10 03:12:56 字數 2744 閱讀 1415

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...