Tkinter自學(xué)02:tkinter 的3種布局管理器

一橄唬、簡(jiǎn)介

所謂布局管理法竞,就是對(duì)添加到窗口中的組件的大小和位置進(jìn)行設(shè)置耙厚。此外,當(dāng)用戶調(diào)整了窗口大小后岔霸,布局管理器還會(huì)自動(dòng)調(diào)整窗口中各個(gè)組件的大小和位置薛躬。
tkinter有三種布局管理器:
(1)Pack
(2)Gird
(3)Place

二、pack布局

使用pack布局時(shí)呆细,當(dāng)向窗口中添加組件時(shí)型宝,這些組件會(huì)依次向后排列,排列方向可以是水平的,也可以是垂直的趴酣。

1.pack的參數(shù)

通常我推薦使用python自帶的help()來(lái)查看我們不太熟悉的函數(shù)梨树。

>>> help(tkinter.Label.pack)
Help on function pack_configure in module tkinter:

pack_configure(self, cnf={}, **kw)
    Pack a widget in the parent widget. Use as options:
    after=widget - pack it after you have packed widget
    anchor=NSEW (or subset) - position widget according to
                              given direction                                                                                     
    before=widget - pack it before you will pack widget                                                                           
    expand=bool - expand widget if parent size grows
    fill=NONE or X or Y or BOTH - fill widget if widget grows
    in=master - use master to contain this widget
    in_=master - see 'in' option description
    ipadx=amount - add internal padding in x direction
    ipady=amount - add internal padding in y direction
    padx=amount - add padding in x direction
    pady=amount - add padding in y direction
    side=TOP or BOTTOM or LEFT or RIGHT -  where to add this widget.

從上面可以看到,pack通常支持以下的方法:

方法名稱 作用 可用的參數(shù)
anchor 根據(jù)給定方向放置位置小部件 N,W,S,E,NW,NE,SW,SE,CENTER(實(shí)際上是東南西北方位的簡(jiǎn)稱岖寞,上北下南左西右東
expand 指定當(dāng)父級(jí)容器增大時(shí)是否拉伸組件 布爾值抡四,True,F(xiàn)alse
fill 設(shè)置組件是否延水平或垂直方向填充 X,Y,BOTH,NONE
ipadx 指定組件在x方向(水平方向)的內(nèi)部留白 數(shù)值仗谆,表示像素
ipady 指定組件在y方向(垂直方向)的內(nèi)部留白 數(shù)值指巡,表示像素
padx 指定組件在x方向(水平方向)與其他組件的間距 數(shù)值,表示像素
pady 指定組件在y方向(垂直方向)與其他組件的間距 數(shù)值隶垮,表示像素
side 設(shè)置組件的添加位置 TOP,BOTTOM,LEFT,RIGHT

以上就是pack的常用參數(shù)藻雪,推薦自己試一試。下面介紹幾種常用的參數(shù)的使用效果岁疼。

2.幾個(gè)參數(shù)的使用效果示例

先寫一個(gè)沒(méi)有參數(shù)的栗子阔涉。

from tkinter import *

root = Tk()

lab1 = Label(root,text="第一個(gè)標(biāo)簽",bg="red")
lab2 = Label(root,text="第二二個(gè)標(biāo)簽",bg="yellow")
lab3 = Label(root,text="第三三三個(gè)標(biāo)簽",bg="green")

lab1.pack()
lab2.pack()
lab3.pack()

root.mainloop()

結(jié)果如下:


原始.png

(1)side的使用

還是上面的栗子,稍微改一下

lab1.pack(side=TOP)
lab2.pack(side=LEFT)
lab3.pack(side=BOTTOM)

side.png

可以看到捷绒,side會(huì)改變排列位置瑰排。其他的情況可以自己試試。

(2)fill的使用

將原始的栗子改一下:

lab1.pack(fill=X)
lab2.pack(fill=Y)
lab3.pack(fill=NONE)
fill.png

實(shí)際上暖侨,第二個(gè)標(biāo)簽是垂直方向填充的椭住,只是這里看不出來(lái),還是建議自己嘗試字逗。

(3)anchor的使用

lab1.pack(anchor=N)
lab2.pack(anchor=E)
lab3.pack(anchor=SW)
anchor.png

(4)綜合使用

多種屬性綜合起來(lái)使用京郑,可以得到自己想要的結(jié)果,建議自己多去嘗試葫掉。
這里舉一個(gè)小栗子些举。

lab1.pack(side=LEFT,fill=Y)
lab2.pack(fill=X)
lab3.pack(fill=BOTH,expand=True)

image.png

當(dāng)窗口大小改變時(shí)
image.png

注意看看什么改變,什么沒(méi)改變俭厚。起到作用的參數(shù)分別是哪些户魏?

三、Grid布局

Grid布局是Tkinter后來(lái)引入的布局方式挪挤,相對(duì)來(lái)說(shuō)叼丑,使用更方便簡(jiǎn)單。而且相比Pack布局扛门,Grid布局在細(xì)節(jié)的調(diào)整上要更加強(qiáng)大鸠信。
Grid布局將容器空間分成一個(gè)個(gè)類似excel表格的單元格,按照行(row)列(column)的方式排列組件论寨,組件位置由其行和列的值來(lái)決定:
行號(hào)相同而列號(hào)不同的幾個(gè)組件會(huì)被依次上下排列
列號(hào)相同而行號(hào)不同的幾個(gè)組件會(huì)被依次左右排列
使用Grid布局的過(guò)程就是為各個(gè)組件指定行號(hào)和列號(hào)的過(guò)程星立,不需要為每個(gè)網(wǎng)格指定大小爽茴,Grid布局會(huì)自動(dòng)設(shè)置合適的大小。

1.Grid的參數(shù)

還是推薦使用python自帶的help()來(lái)查看我們不太熟悉的函數(shù)贞铣。

>>> help(tkinter.Label.grid)
Help on function grid_configure in module tkinter:

grid_configure(self, cnf={}, **kw)
    Position a widget in the parent widget in a grid. Use as options:
    column=number - use cell identified with given column (starting with 0)
    columnspan=number - this widget will span several columns
    in=master - use master to contain this widget
    in_=master - see 'in' option description
    ipadx=amount - add internal padding in x direction
    ipady=amount - add internal padding in y direction
    padx=amount - add padding in x direction
    pady=amount - add padding in y direction
    row=number - use cell identified with given row (starting with 0)
    rowspan=number - this widget will span several rows
    sticky=NSEW - if cell is larger on which sides will this
                  widget stick to the cell boundary

上面的參數(shù)與Pack的很多都相同闹啦,其余的參數(shù)都很好理解,簡(jiǎn)單列在下面供參考:

方法名稱 作用 可用的參數(shù)
row 指定行號(hào) 從0開(kāi)始為第1行
column 指定列號(hào) 從0開(kāi)始為第1列
rowspan 指定跨越的行的數(shù)量 默認(rèn)為1辕坝,跨越多行則指定數(shù)值
columnspan 指定跨越的列的數(shù)量 默認(rèn)為1,跨越多列則指定數(shù)值
sticky 指定組件粘在單元格哪個(gè)方位的邊界上 與anchor一樣

2.幾個(gè)Grid的參數(shù)的演示

接Pack的第一個(gè)栗子荐健,將布局方式稍微做一下改變:

lab1.grid(row=0,column=0)
lab2.grid(row=0,column=1)
lab3.grid(row=1,column=1)
grid.png

注意到酱畅,類似excel,列寬默認(rèn)根據(jù)最寬的組件寬度來(lái)設(shè)置江场,行高也是一樣的纺酸,這里沒(méi)有演示,可以自己試試址否。

四餐蔬、Place布局

Place布局就是其他GUI布局中的“絕對(duì)布局”,要求指定每個(gè)組件的絕對(duì)位置或者相對(duì)于其他組件的相對(duì)位置佑附。

Place的參數(shù)

還是先看help:

>>> help(tkinter.Label.place)
Help on function place_configure in module tkinter:

place_configure(self, cnf={}, **kw)
    Place a widget in the parent widget. Use as options:
    in=master - master relative to which the widget is placed
    in_=master - see 'in' option description
    x=amount - locate anchor of this widget at position x of master
    y=amount - locate anchor of this widget at position y of master
    relx=amount - locate anchor of this widget between 0.0 and 1.0
                  relative to width of master (1.0 is right edge)
    rely=amount - locate anchor of this widget between 0.0 and 1.0
                  relative to height of master (1.0 is bottom edge)
    anchor=NSEW (or subset) - position anchor according to given direction
    width=amount - width of this widget in pixel
    height=amount - height of this widget in pixel
    relwidth=amount - width of this widget between 0.0 and 1.0
                      relative to width of master (1.0 is the same width
                      as the master)
    relheight=amount - height of this widget between 0.0 and 1.0                                                                  
                       relative to height of master (1.0 is the same
                       height as the master)
    bordermode="inside" or "outside" - whether to take border width of
                                       master widget into account

不做過(guò)多的介紹了樊诺,參數(shù)基本上能看懂,無(wú)非就是指定絕對(duì)的位置和相對(duì)的位置音同,而一般來(lái)說(shuō)Place用得較少词爬。

總結(jié):整體來(lái)看,個(gè)人覺(jué)得使用的優(yōu)先級(jí)是:Grid>Pack>Place

所以還是推薦Grid布局管理权均,方便快捷顿膨,整體設(shè)計(jì)起來(lái)比較方便。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叽赊,一起剝皮案震驚了整個(gè)濱河市恋沃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌必指,老刑警劉巖囊咏,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異取劫,居然都是意外死亡匆笤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門谱邪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炮捧,“玉大人,你說(shuō)我怎么就攤上這事惦银∨乜危” “怎么了末誓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)书蚪。 經(jīng)常有香客問(wèn)我喇澡,道長(zhǎng),這世上最難降的妖魔是什么殊校? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任晴玖,我火速辦了婚禮,結(jié)果婚禮上为流,老公的妹妹穿的比我還像新娘呕屎。我一直安慰自己,他們只是感情好敬察,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布秀睛。 她就那樣靜靜地躺著,像睡著了一般莲祸。 火紅的嫁衣襯著肌膚如雪蹂安。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天锐帜,我揣著相機(jī)與錄音田盈,去河邊找鬼。 笑死抹估,一個(gè)胖子當(dāng)著我的面吹牛缠黍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播药蜻,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瓷式,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了语泽?” 一聲冷哼從身側(cè)響起贸典,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踱卵,沒(méi)想到半個(gè)月后廊驼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惋砂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年妒挎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片西饵。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酝掩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眷柔,到底是詐尸還是另有隱情期虾,我是刑警寧澤原朝,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站镶苞,受9級(jí)特大地震影響喳坠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茂蚓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一壕鹉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧聋涨,春花似錦御板、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)敬鬓。三九已至淹朋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钉答,已是汗流浹背础芍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留数尿,地道東北人仑性。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像右蹦,于是被迫代替她去往敵國(guó)和親诊杆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容