Python的GUI編程之Pack、Place、Grid的區(qū)別說明_第1頁
Python的GUI編程之Pack、Place、Grid的區(qū)別說明_第2頁
Python的GUI編程之Pack、Place、Grid的區(qū)別說明_第3頁
Python的GUI編程之Pack、Place、Grid的區(qū)別說明_第4頁
Python的GUI編程之Pack、Place、Grid的區(qū)別說明_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第Python的GUI編程之Pack、Place、Grid的區(qū)別說明目錄GUI編程之Pack、Place、Grid的區(qū)別Pack布局管理Place布局管理Grid布局管理GUI中關(guān)于打包幾何管理器(Pack)的一些細(xì)節(jié)先談?wù)刾acker布局系統(tǒng)的工作原理打包順序?qū)羟薪Y(jié)果產(chǎn)生影響打包幾何管理器的各個選項細(xì)節(jié)

GUI編程之Pack、Place、Grid的區(qū)別

本文講述如何使用tkinter的布局管理(被稱作layoutmanagers或geometrymanagers).tkinter有三種布局管理方式:

packgridplace

注意這三種布局管理在同一個masterwindow里一定不可以混用!布局管理有以下功能:

將控件放置在屏幕上,包括控件的位置及控件的大小將控件注冊到本地窗口系統(tǒng)中管理控件在屏幕上的顯示

雖然控件自己也可以指定大小和對齊方式等信息,但最終的控件大小及位置還是由布局管理決定的.

Pack布局管理

pack是三種布局管理中最常用的.另外兩種布局需要精確指定控件具體的顯示位置,而pack布局可以指定相對位置,精確的位置會由pack系統(tǒng)自動完成.這也使得pack布局沒有另外兩種布局方式靈活.所以pack是

簡單應(yīng)用的首選布局

fill控件填充方式

設(shè)置組件之間的間隙大小

ipadx,ipady設(shè)置內(nèi)部間隙padx,pady設(shè)置外部間隙side順次放置控件

Place布局管理

Place布局管理可以顯式的指定控件的絕對位置或相對于其他控件的位置.要使用Place布局,調(diào)用相應(yīng)控件的place()方法就可以了.所有tkinter的標(biāo)準(zhǔn)控件都可以調(diào)用place()方法.

下面是一個使用Place布局的例子:為Label控件設(shè)置隨機(jī)的背景色,然后計算各個Label的背景色的亮度(灰度值),如果其亮度小于120,則將其前景色(文字顏色,fg屬性)設(shè)置為白色,否則設(shè)為黑色.這樣做是為了避免使背景色和前景色過于接近而導(dǎo)致文字不易閱讀

Grid布局管理

Pack作為首選的布局管理方式,其運(yùn)作方式并不是特別易于理解.已經(jīng)由Pack布局完成的設(shè)計也很難做出改變.Grid布局在1996年作為另一種可供選擇的布局方式被引入.Grid布局方式易學(xué)易用,但似乎大家還是習(xí)慣用Pack.

Grid在很多場景下是最好用的布局方式.相比而言,Pack布局在控制細(xì)節(jié)方面有些力不從心.Place布局雖然可以完全控制控件位置,但這也導(dǎo)致使用Place會比其他兩種布局方式更加復(fù)雜.

Grid把控件位置作為一個二維表結(jié)構(gòu)來維護(hù),即按照行列的方式排列控件:控件位置由其所在的行號和列號決定.行號相同而列號不同的幾個控件會被彼此上下排列;列號相同而行號不同的幾個控件會被彼此左右排列.

使用Grid布局的過程就是為各個控件指定行號和列號的過程.不需要為每個格子指定大小,Grid布局會自動設(shè)置一個合適的大小.

GUI中關(guān)于打包幾何管理器(Pack)的一些細(xì)節(jié)

先談?wù)刾acker布局系統(tǒng)的工作原理

pack打包的步驟如下:

packer最初開始時,擁有整個父組件容器的可用空間(如整個框架或頂層窗口的空間)隨著組件在某一條邊上被打包,該組件獲得了剩余空間中要求的一條邊,剩余空間縮小(默認(rèn)為頂部那條邊,即TOP)。經(jīng)過先前的打包要求,空間縮小,后來的打包要求只能獲得縮小后剩余空間的一條邊。組件都分配空間后,expand選項劃分所有的剩余空間,fill選項和anchor選項在組件分配的空間內(nèi)拉伸調(diào)整組件

由此可見,pack選項執(zhí)行的順序為sideexpandfill/anchor。

fill與anchor選項必須在組件分配到所在空間,完成打包順序,expand要求后才可使用。

打包順序?qū)羟薪Y(jié)果產(chǎn)生影響

打包過程中,pack的順序很重要。注意其中因為父窗口縮小而產(chǎn)生的裁切問題:先打包的最后被裁切。(從技術(shù)上講,窗口尺寸改變后優(yōu)惠執(zhí)行打包步驟。這意味著,在窗口縮小時,將沒有足夠的空間留給最后打包的組件,看上去就像最先打包的組件最后被裁切掉)

觀察以下兩個代碼因窗口縮小時產(chǎn)生的不同效果:

#我們只關(guān)注裁切問題

fromtkinterimport*

defgreeting():

print('Hellostdoutworld!...')

win=Frame()

win.pack(expand=YES,fill=BOTH)

Button(win,text='Hello',command=greeting).pack()

Label(win,text='Hellocontainerworld').pack(side=TOP)#side選項使該標(biāo)簽位于頂部

win.mainloop()

可以看到窗口縮小時由于裁切問題而產(chǎn)生結(jié)果是這樣的,明顯是label先被擠出去,因為label標(biāo)簽后被打包

fromtkinterimport*

defgreeting():

print('Hellostdoutworld!...')

win=Frame()

win.pack(expand=YES,fill=BOTH)

Label(win,text='Hellocontainerworld').pack(side=TOP)#side選項使該標(biāo)簽位于頂部

Button(win,text='Hello',command=greeting).pack()

win.mainloop()

可以看到窗口縮小時由于裁切問題而產(chǎn)生結(jié)果是這樣的,因為Button標(biāo)簽后被打包。

***因此:打包順序?qū)羟薪Y(jié)果產(chǎn)生影響***

打包幾何管理器的各個選項細(xì)節(jié)

side:決定獲得剩余空間的某一側(cè)(可選LEFT,RIGHT,TOP,BOTTOM),默認(rèn)為TOP;expand:拓沖分配所得空間(可選NO,YES

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論