pack布局
pack 函數默認先使用的放到上面,然后依次向下排,水平位置居中(相對父窗口)
pack 參數 [ 參數值必須大寫 ]
side:按扭停靠在窗口的哪個位置
left:左 、 top: 上 、right: 右、botton:下
fill:填充
x:水平方向填充、y:豎直方向填充、both:水平和豎直方向填充、none:不填充
expand:是否擴展空白區
yes:擴展整個空白區、no:不擴展
anchor:位置
N:北 下、E:東 右、S:南 下、W:西 左、CENTER:中間
padx: x方向的外邊距
pady: y方向的外邊距
ipadx: x方向的內邊距
ipady: y方向的內邊距
from tkinter import * root = Tk() Button(root,text='G').pack(anchor=E,padx=20) root.mainloop()
grid 布局
grid 函數也支持諸如 ipadx,ipady,padx,pady,它們 的意思和 pack 函數是一樣的,默認邊距是 0;
grid 布局是網格格式 ,用 row 表示行,用 column 表示列,其中值得 注意的是 row 和 column 的編號都從 0 開始
grid 參數
row 表示行
column 表示列
sticky:它決定了這個組件是從哪個方向開始的
N:北 上、E:東 右、S:南 下、W:西 左
rowspan : 跨越(合並)的行數
columnspan: 跨越(合並)的列數
from tkinter import * tk=Tk() var=IntVar() #標簽控件,顯示文本和位圖,展示在第一行 Label(tk,text="First").grid(row=0,sticky=E)#靠右 Label(tk,text="Second").grid(row=1,sticky=W)#第二行,靠左 #輸入控件 Entry(tk).grid(row=0,column=1,padx=10,pady=10) Entry(tk).grid(row=1,column=1) #多選框插件 button=Checkbutton(tk,text="Precerve aspect",variable=var) button.grid(row=2,columnspan=2,sticky=W) #插入圖片 photo=PhotoImage(file="wm.png") label=Label(image=photo) label.grid(row=0,column=2,rowspan=2,columnspan=2, sticky=W+E+N+S, padx=5, pady=5)#合並兩行,兩列,居中,四周外延5個長度 #按鈕控件 button1=Button(tk,text="Zoom in") button1.grid(row=2,column=2) button2=Button(tk,text="Zoom out") button2.grid(row=2,column=3) #主事件循環 mainloop()
place 布局
place 最簡單最靈活的一種布局,使用組件坐標來放置組件的位置。但是不太推薦使用,在不同分辨率下,界面往往有較大差異。
place 參數
anchor:位置,默認值為 NW 同pack布局
x、y: 組件左上角的x、y坐標 整數,默認值0 絕對位置坐標,單位像素
relx、rely :組件相對於父容器的x、y坐標 0~1之間浮點數 相對位置,0.0表示左邊緣(或上邊緣),1.0表示右邊緣(或下邊緣)
width、height :組件的寬度、高度 非負整數 單位像素
relwidth、relheight :組件相對於父容器的寬度、高度 0~1之間浮點數 與relx(rely)取值相似
bordermode: 如果設置為INSIDE,組件內部的大小和位置是相對的,不包括邊框;如果是OUTSIDE,組件的外部大小是相對的,包括邊框 INSIDE、OUTSIDE(默認值INSIDE) 可以使用常量INSIDE、OUTSIDE,也可以使用字符串形式”inside”、”outside”
from tkinter import * root = Tk() Button(root,text='G').place(x=20,y=30,width=30,height=40,bordermode=INSIDE) root.mainloop()