该软件有5块部分组成, 左边的每个按钮点开是单独的一个个QWidget窗体,右边是一个堆叠布局。点击左边的功能按钮,切换右边的堆叠布局。
布局图:
左边下方有个垂直布局,这个是用来占位,为了让按钮局上方。
该功能是处理多张图片合成gif动图
合成输出和图片合成 这个区域处理起来有点麻烦,
这里是表单布局,两行,第二行的标题部分是空串;下方的”图片合成“区域用一样的处理方式。控件先存到表单布局中,然后再依次放入垂直布局中。
其他功能区域的布局图设计差不多的。
left_place和right_place 这两块是用来占位,为了把操作区域居中。
我给主窗体加了个状态栏,点击状态栏上的图标打开窗口
界面总体的样式
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来对组件进行布局会方便很多。