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()