Tkinter自学02:tkinter 的3种布局管理器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tkinter自学02:tkinter 的3种布局管理器相关的知识,希望对你有一定的参考价值。

参考技术A

所谓布局管理,就是对添加到窗口中的组件的大小和位置进行设置。此外,当用户调整了窗口大小后,布局管理器还会自动调整窗口中各个组件的大小和位置。
tkinter有三种布局管理器:
(1)Pack
(2)Gird
(3)Place

使用pack布局时,当向窗口中添加组件时,这些组件会依次向后排列,排列方向可以是水平的,也可以是垂直的。

通常我 推荐 使用python自带的 help() 来查看我们不太熟悉的函数。

从上面可以看到,pack通常支持以下的方法:

以上就是pack的常用参数,推荐自己试一试。下面介绍几种常用的参数的使用效果。

先写一个没有参数的栗子。

结果如下:

还是上面的栗子,稍微改一下

将原始的栗子改一下:

实际上,第二个标签是垂直方向填充的,只是这里看不出来,还是建议自己尝试。

多种属性综合起来使用,可以得到自己想要的结果,建议自己多去尝试。
这里举一个小栗子。

Grid布局是Tkinter后来引入的布局方式,相对来说,使用更方便简单。而且相比Pack布局,Grid布局在细节的调整上要更加强大。
Grid布局将容器空间分成一个个类似excel表格的单元格,按照 行(row) 列(column) 的方式排列组件,组件位置由其行和列的值来决定:
行号相同而列号不同的几个组件会被依次上下排列
列号相同而行号不同的几个组件会被依次左右排列
使用Grid布局的过程就是为各个组件指定行号和列号的过程,不需要为每个网格指定大小,Grid布局会自动设置合适的大小。

还是 推荐 使用python自带的 help() 来查看我们不太熟悉的函数。

上面的参数与Pack的很多都相同,其余的参数都很好理解,简单列在下面供参考:

接Pack的第一个栗子,将布局方式稍微做一下改变:

注意到,类似excel,列宽默认根据最宽的组件宽度来设置,行高也是一样的,这里没有演示,可以自己试试。

Place布局就是其他GUI布局中的“绝对布局”,要求指定每个组件的绝对位置或者相对于其他组件的相对位置。

还是先看help:

不做过多的介绍了,参数基本上能看懂,无非就是指定绝对的位置和相对的位置,而一般来说Place用得较少。

所以还是推荐Grid布局管理,方便快捷,整体设计起来比较方便。

Python连载61-tkinter三种布局

一、pack布局举例

 

#pack布局案例

import tkinter

baseFrame = tkinter.Tk()

#以下代码都是创建一个组件,然后布局

btn1 = tkinter.Button(baseFrame,text="A")

btn1.pack(side=tkinter.LEFT,expand=tkinter.YES,fill=tkinter.Y)

​

btn2 = tkinter.Button(baseFrame,text="B")

btn2.pack(side=tkinter.TOP,expand=tkinter.YES,fill=tkinter.BOTH)

​

btn2 = tkinter.Button(baseFrame,text="C")

btn2.pack(side=tkinter.RIGHT,expand=tkinter.YES,fill=tkinter.NONE)

​

btn2 = tkinter.Button(baseFrame,text="D")

btn2.pack(side=tkinter.LEFT,expand=tkinter.NO,fill=tkinter.Y)

​

btn2 = tkinter.Button(baseFrame,text="F")

btn2.pack(side=tkinter.BOTTOM,expand=tkinter.YES)

​

btn2 = tkinter.Button(baseFrame,text="G")

btn2.pack(anchor=tkinter.SE)

​

baseFrame.mainloop()

 

二、grid布局举例

1.通用使用方式:组件对象,grid(设置.......)

2.利用row,column编号,都是从0开始

3.sticky:N\\E\\S\\W表示上下左右,用来决定组件从哪个方向开始

4.支持ipadx,padx等参数,跟pack函数含义一样

5.支持rowspan,columnspan,表示跨行,跨列数量

 

#pack布局案例

import tkinter

# baseFrame = tkinter.Tk()

# #以下代码都是创建一个组件,然后布局

# btn1 = tkinter.Button(baseFrame,text="A")

# btn1.pack(side=tkinter.LEFT,expand=tkinter.YES,fill=tkinter.Y)

#

# btn2 = tkinter.Button(baseFrame,text="B")

# btn2.pack(side=tkinter.TOP,expand=tkinter.YES,fill=tkinter.BOTH)

#

# btn2 = tkinter.Button(baseFrame,text="C")

# btn2.pack(side=tkinter.RIGHT,expand=tkinter.YES,fill=tkinter.NONE)

#

# btn2 = tkinter.Button(baseFrame,text="D")

# btn2.pack(side=tkinter.LEFT,expand=tkinter.NO,fill=tkinter.Y)

#

# btn2 = tkinter.Button(baseFrame,text="F")

# btn2.pack(side=tkinter.BOTTOM,expand=tkinter.YES)

#

# btn2 = tkinter.Button(baseFrame,text="G")

# btn2.pack(anchor=tkinter.SE)

#

#

# baseFrame.mainloop()

​

baseFrame2 = tkinter.Tk()

​

lb1 = tkinter.Label(baseFrame2,text="账号:")

lb1.grid(row=0,sticky=tkinter.W)

tkinter.Entry(baseFrame2).grid(row=0,column=1,sticky=tkinter.E)

​

lb2 = tkinter.Label(baseFrame2,text="密码:")

lb2.grid(row=1,sticky=tkinter.W)

tkinter.Entry(baseFrame2).grid(row=1,column=1,sticky=tkinter.E)

​

button = tkinter.Button(baseFrame2,text="登录").grid(row=2,column=1,sticky=tkinter.E)

​

baseFrame2.mainloop()

三、place布局

1.明确方位的摆放

2.相对位置布局,随意改变窗口大小会导致混乱。

3.使用place函数,分为绝对布局和相对布局,绝对布局使用x,y参数

4.相对布局使用relx.rely,relheight,relwidth.

四、源码

D61_ThreeFrameOfTkinter.py

https://github.com/ruigege66/Python_learning/blob/master/D61_ThreeFrameOfTkinter.py​

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

 

以上是关于Tkinter自学02:tkinter 的3种布局管理器的主要内容,如果未能解决你的问题,请参考以下文章

tkinter的三种几何布局管理类

我Python的tkinter库的grid布局无效?怎么办?

Tkinter自学03:Label组件和组件的通用属性

tkinter控件的布局方式

Python Tkinter之布局

Python连载60-Tkinter布局按钮以及属性详解