Python Tkinter之布局

Python010

Python Tkinter之布局,第1张

1.简介。

Tkinter是Python唯一自带的GUI工具包,它背后使用的Tk组件库是开源世界中公认的标准。

Tkinter对于图形界面布局管理有三大类:pack、grid、place

Pack()方法提供了选项来布局组件在界面中的位置,选项有:side、expand、fill、等

Grid()方法是采用行列来确定组件在界面中的位置,row是行号,column是列号。

Place()方法是通过组件在界面中的横纵坐标来固定位置。

2.分别使用pack和grid来布局同一组件。

程序如下:

information=['Name','Gender','Age']

def pack(parent):

entries1 = []

for i in information:

row=Frame(parent)

row.pack()

lab1=Label(row,text=i,relief=RAISED,width=7,padx=5,pady=5)

lab1.pack(side=LEFT)

ent1=Entry(row,relief=SUNKEN,width=30)

ent1.pack(side=LEFT,ipadx=5,ipady=5)

entries1.append(ent1)

def print1():

print([ent.get() for ent in entries1])

Button(parent,text='提交',command=print1).pack()

def grid(parent):

row=1

entries2=[]

for i in information:

lab2=Label(parent,text=i,width=7,relief=RAISED,padx=5,pady=5)

ent2=Entry(parent,width=30,relief=SUNKEN)

lab2.grid(row=row,column=0)

ent2.grid(row=row,column=1,ipadx=5,ipady=5)

row +=1

entries2.append(ent2)

def print2():

print([ent.get() for ent in entries2 ])

Button(parent,text='提交',command=print2).grid(columnspan=2)

frm1=Frame(root,bd=5,relief=RAISED)

frm1.pack()

Label(frm1,text='pack').pack()

pack(frm1)

frm2=Frame(root,bd=5,relief=RAISED)

Label(frm2,text='grid').grid(columnspan=2)

frm2.pack()

grid(frm2)

运行结果如下:

3.总结。

从运行结果界面上看两种布局的效果差不多,但通过程序可以看到,这个类似表格的界面使用pack布局的话要是两个组件布置在同一行中要使用一个容器把组件先绑定到一起来。而grid布局在这里就显得比pack方便多了,直接定义各组件在父组件中的行与列就行了。所以通过上面的比较可以得出,如果界面要求是表格类型的那么就使用grid来对组件进行布局会方便很多。

不同于C#语言,Tkinter库没有提供专门的ListView表格控件,而是使用TreeView,这一点令人觉得有点奇怪,但使用起来也不是太复杂。

举例:实现一个显示联系人的表格:

显示效果:

修改第一行姓名为“张一山”: