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