Tkinter如何组织或者说是堆叠组件呢?它提供了三种组件管理器,用予组织各组件:
- pack
- grid
- place
Pack()将搭建好组件,进行在Window或者 frame上进行展示。主要有以下 几个属性
- side
- expand
- fill
- ipadx,ipady
- padx,pady
- anchor
再回顾一下tkinter的坐标系:
左上角是(0,0),横向为x,纵向为y。
一段简单的组件堆叠代码:
import tkinter as tk
root = tk.Tk()
root.title('Tkinter Pack Layout')
root.geometry('600x400')
label1 = tk.Label(master=root, text='Tkinter',bg='red',fg='white')
label2 = tk.Label(master=root,text='Pack Layout',bg='green', fg='white')
label3 = tk.Label(master=root, text='Demo',bg='blue', fg='white')
label1.pack()
label2.pack()
label3.pack()
root.mainloop()
执行结果:
1、side
可见,三个label在Y方向上,从上往下依次摆放。这个堆叠的方向,是由side来控制的。side的取值:
- top(默认值)
- bottom
- left
- right
这四个取值,可以分别用预定义常量来替换tk.TOP、tk.BOTTOM、tk.LEFT、tk.RIGHT
import tkinter as tk
root = tk.Tk()
root.title('Tkinter Pack Layout')
root.geometry('600x400')
label1 = tk.Label(master=root, text='Tkinter',bg='red',fg='white')
label2 = tk.Label(master=root,text='Pack Layout',bg='green', fg='white')
label3 = tk.Label(master=root, text='Demo',bg='blue', fg='white')
label1.pack(side=tk.BOTTOM)#label1.pack(side='bottom')
label2.pack(side=tk.BOTTOM)#label1.pack(side='bottom')
label3.pack(side=tk.BOTTOM)#label1.pack(side='bottom')
root.mainloop()
执行结果:
类似的,可以设置成 tk.LEFT 、 tk.RIGHT。
widget space
tkinter中有两个空间跨度,一个是组件所占的空间,另一个是组件可以拥有的空间。例如 , 一个组件根据其内容的大小占有的一定的空间,然后,实际上,这个组件可以视windows或者 frame,实际占用更多的空间。
expand
通过expand=True,可以让组件实际占用的空间更大,在横向或纵向上进行扩展,取决于堆叠的方向。如果组件是竖向堆叠的,则组件的height将扩大,如果是横向堆叠的,width将更多。
import tkinter as tk
root = tk.Tk()
root.title('Tkinter Pack Layout')
root.geometry('600x400')
label1 = tk.Label(master=root, text='Tkinter',bg='red',fg='white')
label2 = tk.Label(master=root,text='Pack Layout'