Python GUI程式設計學習筆記之tkinter介面佈局顯示詳解
阿新 • • 發佈:2020-03-31
本文例項講述了Python GUI程式設計學習筆記之tkinter介面佈局顯示。分享給大家供大家參考,具體如下:
相關內容:
- pack
- 介紹
- 常用引數
- 使用情況
- 常用函式
- grid
- 介紹
- 常用引數
- 使用情況
- 常用函式
- place
- 介紹
- 常用引數
- 使用情況
- 常用函式
首發時間:2018-03-04 14:20
pack:
- 介紹:
- pack幾何管理器按行或列打包小部件。 可以使用填充fill,展開expand和靠邊side等選項來控制此幾何體管理器。
- pack的排放控制元件的形式就像將一個個控制元件按大小從上到下放過去
- 在視窗不設定大小的而使用pack進行佈局的情況下,視窗預設大小為剛好包裹所有控制元件的大小
- 預設情況下新增的控制元件是居中且佔據整行的
- 常用引數:
- fill:填充分配給控制元件的空間,fill:X為填充X軸方向,Y為Y軸方向,BOTH為X+Y
- expand:先按普通標準來規定控制元件大小,如果後面視窗還剩下空間,那麼會分給那些expand=True的控制元件,如圖中是兩個不同大小的按鈕,其中2expand=True ,當使用expand=True時,side將不會生效!
- side:使控制元件靠視窗的指定方向並排,side可取值LEFT,RIGHT,TOP,BOTTOM.
- anchor:對齊方式,可取值“n”,“s”,“w”,“e”,“nw”,“sw”,“se”,“ne”,“center”(預設為” center”)
- ipadx,ipady:內邊距
- padx,pady:外邊距
- 適用情況:與gird相比,pack有一定的侷限性,但在一些但很常見的情況下使用起來要容易得多:
- 將一個小部件放入一個框架(或任何其他容器小部件)中,並讓它填充整個框架
- 將多個小部件放在一起
- 並排放置一些小部件
- 補充:
- 常用函式:
- pack_propagate(flag):由視窗呼叫來配置pack控制元件時視窗的大小,當flag=0時,那麼視窗大小將不再僅僅包裹住所有控制元件,這時候視窗的高度和寬度設定才可以生效
- pack_forget():移除控制元件,但並沒有進行摧毀,可以再次使用pack或其他方式來顯示
- pack_info():返回pack提供的選項所對應得值。
- pack_slaves():以列表方式返回本元件的所有子元件物件。
- 常用函式:
from tkinter import * root=Tk() # for i in range(10): ##side # btn = Button(text=i) # btn.pack(side=LEFT) # btn.pack(side=RIGHT) # btn.pack(side=(TOP,LEFT)) ####fill # btn.pack(fill=X) # btn.pack(side=LEFT,fill=Y) # btn.pack(fill=BOTH) ##expand # btn1=Button(text=1,bg='green') # btn2=Button(text=2,bg='yellow') # btn1.pack(fill=X) # btn2.pack(expand=True) #anchor: # btn1=Button(text=1,bg='yellow') # btn1.pack(fill=X) # btn2.pack(anchor=E) #pack_propagete # btn1=Button(text=1,bg='yellow') # root.pack_propagate(0) # btn1.pack() # btn2.pack() #pack_forget: # import time,threading # label=Label(text="警告!") # label.pack() # def run(): # start_time=time.time() # while True: # if time.time()-start_time>3: # label.pack_forget() # break # t=threading.Thread(target=run) # t.setDaemon(True) # t.start() root.mainloop()
grid:
- 介紹:grid是格子的意思,grid可以將控制元件區塊式擺放.
- 常用引數:
- row: 行號,區分不同控制元件是否處於同一行
- column: 列號,區分不同控制元件是否處於同一列
- sticky: 決定控制元件的貼靠方向,該選項從集合N,S,E,W [東南西北的意思],中取一個或多個值。比如要將標籤與左邊框對齊,可以使用W(西)
- rowspan:行跨度,決定某個控制元件佔的行數 ,預設一行
- columnspan:列跨度,決定某個控制元件佔的列數,預設一列
- ipadx,pady:外邊距
- 適用情況:
- 設計對話方塊的時候特別方便
- 區塊化擺放的時候
- 補充:
- 常用函式:
- grid_forget :移除控制元件,但並沒有進行摧毀,可以再次使用grid或其他方式來顯示 [grid_remove有同樣作用]
-
grid_propagete
:由視窗呼叫來配置pack控制元件時視窗的大小,這時候視窗的高度和寬度設定才可以生效 -
grid_slaves():以列表方式返回本元件的所有子元件物件。
- 常用函式:
from tkinter import * root=Tk() root.title("我的視窗") label_user=Label(text='使用者名稱:',bg='green') label_pwd=Label(text='密碼:',bg='green') user=Entry() pwd=Entry() # row,column,sticky label_user.grid(row=0,column=0,sticky=W) #一個有sticky,一個沒有sticky,以作區分 label_pwd.grid(row=1,column=0) # rowspan,columnspan user.grid(row=0,column=1) pwd.grid(row=1,column=1) btn=Button(text="提交") btn.grid(row=0,column=3,rowspan=2,columnspan=2,padx=5,pady=5) # 下面主要是將第一列拉大來顯示上面sticky的效果 v=IntVar() check=Checkbutton(text="下次自動登入",variable=v,) check.grid(row=2,sticky=W) # _forget: import time,threading label=Label(text="歡迎登入!",bg='blue') label.grid() def run(): start_time=time.time() while True: if time.time()-start_time>3: label.grid_forget() break t=threading.Thread(target=run) t.setDaemon(True) t.start() root.mainloop()
place:
- 介紹:可以使用絕對的位置或相對位置來擺放控制元件。
- 常用引數:
- x:控制元件在視窗中的x座標
- y:控制元件在視窗中的y座標
- relx,rely:與主視窗的相對位置,比如
- relwidth,relheight:相對大小,比如height=0.5,width=0.5時控制元件佔據視窗的四分之一大小
- 適用情況:
- 自定義顯示方式
- 將按鈕定位在對話方塊中
- 補充:
- 常用函式:
- place_forget():移除控制元件,但並沒有進行摧毀,可以再次使用place或其他方式來顯示
- place_slaves():以列表方式返回本元件的所有子元件物件。[slaves()具有同樣功能]
- place_info():返回place提供的選項所對應得值。
- 常用函式:
from tkinter import * root=Tk() root.geometry('100x100') label=Label(text="使用者名稱:",bg='green') entry=Entry() label.pack(fill=X) #x,y # entry.place(x=0,y=0) #relx,rely # entry.place(relx=0.3,rely=0.3) # entry.place(relx=0.5,rely=0.5) #relheight,relwidth # entry.place(relx=0.5,rely=0.5,relheight=0.5,relwidth=0.5) #_forget: import time,threading label2=Label(text="警告!",bg='blue') label2.place(relx=0.2,rely=0.2) def run(): start_time=time.time() while True: if time.time()-start_time>3: label2.place_forget() break t=threading.Thread(target=run) t.setDaemon(True) t.start() root.mainloop()
想要了解更多,可以參考tkinter的官方文件:http://effbot.org/tkinterbook/
更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python資料結構與演算法教程》、《Python Socket程式設計技巧總結》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》
希望本文所述對大家Python程式設計有所幫助。