Python Tkinter Pack布局管理器?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
在江陵等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,江陵網(wǎng)站建設(shè)費(fèi)用合理。
GUI 編程就相當(dāng)于小孩子搭積木,每個積木塊應(yīng)該放在哪里,每個積木塊顯示為多大,也就是對大小和位置都需要進(jìn)行管理,而布局管理器正是負(fù)責(zé)管理各組件的大小和位置的。此外,當(dāng)用戶調(diào)整了窗口的大小之后,布局管理器還會自動調(diào)整窗口中各組件的大小和位置。
如果使用 Pack 布局,那么當(dāng)程序向容器中添加組件時,這些組件會依次向后排列,排列方向既可是水平的,也可是垂直的。
下面程序簡單示范了 Pack 布局的用法,該程序向窗口中添加了三個 Label 組件:
# Python 2.x使用這行 #from Tkinter import * # Python 3.x使用這行 from tkinter import * # 創(chuàng)建窗口并設(shè)置窗口標(biāo)題 root = Tk() # 設(shè)置窗口標(biāo)題 root.title('Pack布局') for i in range(3): lab = Label(root, text="第%d個Label" % (i + 1), bg='#eeeeee') # 調(diào)用pack進(jìn)行布局 lab.pack() # 啟動主窗口的消息循環(huán) root.mainloop()
上面程序創(chuàng)建了一個窗口,然后使用循環(huán)創(chuàng)建了三個 Label,并對這三個 Label 使用了 pack() 方法進(jìn)行默認(rèn)的 Pack 布局。運(yùn)行該程序看到如圖所示的界面:
上圖圖使用的是默認(rèn)的 Pack 布局,實(shí)際上程序在調(diào)用 pack() 方法時可傳入多個選項(xiàng)。例如,通過 help(tkinter.Label.pack) 命令來查看 pack() 方法支持的選項(xiàng),可以看到如下輸出結(jié)果:
>>> 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() 方法通常可支持如下選項(xiàng):
anchor:當(dāng)可用空間大于組件所需求的大小時,該選項(xiàng)決定組件被放置在容器的何處。該選項(xiàng)支持 N(北,代表上)、E(東,代表右)、S(南,代表下)、W(西,代表左)、NW(西北,代表左上)、NE(東北,代表右上)、SW(西南,代表左下)、SE(東南,代表右下)、CENTER(中,默認(rèn)值)這些值。
expand:該 bool 值指定當(dāng)父容器增大時才是否拉伸組件。
fill:設(shè)置組件是否沿水平或垂直方向填充。該選項(xiàng)支持 NONE、X、Y、BOTH 四個值,其中 NONE 表示不填充,BOTH 表示沿著兩個方向填充。
ipadx:指定組件在 x 方向(水平)上的內(nèi)部留白(padding)。
ipady:指定組件在 y 方向(水平)上的內(nèi)部留白(padding)。
padx:指定組件在 x 方向(水平)上與其他組件的間距。
pady:指定組件在 y 方向(水平)上與其他組件的間距。
side:設(shè)置組件的添加位置,可以設(shè)置為 TOP、BOTTOM、LEFT 或 RIGHT 這四個值的其中之一。
當(dāng)程序界面比較復(fù)雜時,就需要使用多個容器(Frame)分開布局,然后再將 Frame 添加到窗口中。例如如下程序:
# Python 2.x使用這行 #from Tkinter import * # Python 3.x使用這行 from tkinter import * class App: def __init__(self, master): self.master = master self.initWidgets() def initWidgets(self): # 創(chuàng)建第一個容器 fm1 = Frame(self.master) # 該容器放在左邊排列 fm1.pack(side=LEFT, fill=BOTH, expand=YES) # 向fm1中添加3個按鈕 # 設(shè)置按鈕從頂部開始排列,且按鈕只能在垂直(X)方向填充 Button(fm1, text='第一個').pack(side=TOP, fill=X, expand=YES) Button(fm1, text='第二個').pack(side=TOP, fill=X, expand=YES) Button(fm1, text='第三個').pack(side=TOP, fill=X, expand=YES) # 創(chuàng)建第二個容器 fm2 = Frame(self.master) # 該容器放在左邊排列,就會挨著fm1 fm2.pack(side=LEFT, padx=10, expand=YES) fm2.pack(side=LEFT, padx=10, fill=BOTH, expand=YES) # 向fm2中添加3個按鈕 # 設(shè)置按鈕從右邊開始排列 Button(fm2, text='第一個').pack(side=RIGHT, fill=Y, expand=YES) Button(fm2, text='第二個').pack(side=RIGHT, fill=Y, expand=YES) Button(fm2, text='第三個').pack(side=RIGHT, fill=Y, expand=YES) # 創(chuàng)建第三個容器 fm3 = Frame(self.master) # 該容器放在右邊排列,就會挨著fm1 fm3.pack(side=RIGHT, padx=10, fill=BOTH, expand=YES) # 向fm3中添加3個按鈕 # 設(shè)置按鈕從底部開始排列,且按鈕只能在垂直(Y)方向填充 Button(fm3, text='第一個').pack(side=BOTTOM, fill=Y, expand=YES) Button(fm3, text='第二個').pack(side=BOTTOM, fill=Y, expand=YES) Button(fm3, text='第三個').pack(side=BOTTOM, fill=Y, expand=YES) root = Tk() root.title("Pack布局") display = App(root) root.mainloop()
上面程序創(chuàng)建了三個 Frame 容器,其中第一個 Frame 容器內(nèi)包含三個從頂部(TOP)開始排列的按鈕,這意味著這三個按鈕會從上到下依次排列,且這三個按鈕能在水平(X)方向上填充;第二個 Frame 容器內(nèi)包含三個從右邊(RIGHT)開始排列的按鈕,這意味著這三個按鈕會從右向左依次排列;第三個 Frame 容器內(nèi)包含三個從底部(BOTTOM)開始排列的按鈕,這意味著這三個按鈕會從下到上依次排列,且這三個按鈕能在垂直(Y)方向上填充。
運(yùn)行上面程序,將看到如下圖所示的界面。
從上圖中可以看到,為運(yùn)行效果添加了三個框,分別代表 fm1、fm2、fm3(實(shí)際上容器是看不到的),此時可以看到 fm1 內(nèi)的三個按鈕從上到下排列,并且可以在水平方向上填充;fm3 內(nèi)的三個按鈕從下到上排列,并且可以在垂直方向上填充。
可能有讀者會有疑問,fm2 內(nèi)的三個按鈕也都設(shè)置了 fill=Y,expand=YES,這說明它們也能在垂直方向上填充,為啥舍看不到呢?仔細(xì)看 fm2.pack(side=LEFT, padx=10, expand= YES)這行代碼,它說明 fm2 本身不在任何方向上填充,因此 fm2 內(nèi)的三個按鈕都不能填充。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。