小鱼儿学Tkinter-Pack布局
2022-06-27 本文已影响0人
小鱼儿_yzh
tkinter 有三种布局管理方式:
· pack · grid · place
注意这三种布局管理在同一个 master window 里一定不可以混用!
布局管理有以下功能:
- 将控件放置在屏幕上,包括控件的位置及控件的大小
- 将控件注册到本地窗口系统中
- 管理控件在屏幕上的显示
虽然控件自己也可以指定大小和对齐方式等信息, 但最终的控件大小及位置还是由布局管理决定的.
Pack 布局管理
- pack 是三种布局管理中最常用的.
- 另外两种布局需要精确指定控件具体的显示位置, 而 pack 布局可以指定相对位置, 精确的位置会由 pack 系统自动完成. 这也使得 pack 布局没有另外两种布局方式灵活.
- pack 是简单应用的首选布局
fill 和 expand
from tkinter import *
root1 = Tk()
root2 = Tk()
root3 = Tk()
root4 = Tk()
root1.geometry('260x260')
root2.geometry('260x260')
root3.geometry('260x260')
root4.geometry('260x260')
root1.title('ROOT 1')
root2.title('ROOT 2')
root3.title('ROOT 3')
root4.title('ROOT 4')
# ROOT1 窗口显示
Label(root1,text='pack').pack()
for i in range(5):
Label(root1,text ='pack'+str(i)).pack()
# ROOT2 窗口显示
Label(root2,text='pack 11',bg='red').pack(fill=Y,expand = 1)
Label(root2,text='pack 12',bg='blue').pack(fill=BOTH,expand = 1)
Label(root2,text='pack 13',bg='green').pack(fill=X,expand =1)
# ROOT3 窗口显示
Label(root3,text='pack 31',bg='red', fg='yellow').pack(fill=Y,expand =0 , side = LEFT)
Label(root3,text='pack 32',bg='blue').pack(fill=BOTH,expand = 0 , side = RIGHT)
Label(root3,text='pack 33',bg='green').pack(fill=X,expand =0, side = TOP)
Label(root3,text='pack 34',bg='green').pack(fill=X,expand =0, side = BOTTOM)
Label(root3,text='pack 35',bg='green').pack(fill=X,expand =0, side = LEFT)
# ROOT4 窗口显示
Label(root4,text='pack 41',bg='red', fg='yellow').pack(fill=Y,expand =1 , side = LEFT)
Label(root4,text='pack 42',bg='blue').pack(fill=BOTH,expand = 1 , side = RIGHT)
Label(root4,text='pack 43',bg='green').pack(fill=X,expand =1, side = TOP)
Label(root4,text='pack 44',bg='green').pack(fill=X,expand =1, side = BOTTOM)
Label(root4,text='pack 45',bg='green').pack(fill=X,expand =1, side = LEFT)
root1.mainloop()
pack 布局示例图
设置组件之间的间隙大小
- ipadx,ipady设置内部间隙
- padx,pady设置外部间隙
- side 顺次放置控件
# ipadx,ipady设置内部间隙
# padx,pady设置外部间隙
# side 顺次放置控件
from tkinter import *
root = Tk()
root.geometry('300x300')
root.title('Pack布局测试 2')
lb_1 = Label(root,text='label_1',bg='red')
lb_1.pack(side = LEFT, ipadx =10 , expand = 1)
lb_2 = Label(root,text='label_2',bg='green')
lb_2.pack(side = LEFT,padx = 10 , expand = 1, fill = BOTH)
lb_3 = Label(root,text='label_3',bg='blue')
lb_3.pack(side = LEFT, pady = 10 , expand = 1, fill = X)
root.mainloop()
label_1 的 ipadx 值变化效果图
label_2 的 padx 值变化效果图
参考资料: