![01a1e133b31a582f6adb0d6894ec7aeb.png](https://i-blog.csdnimg.cn/blog_migrate/7ce58a560758bc32f07625db3e8148d1.jpeg)
pack布局管理器是早期Tkinter中常用的一种布局方式。这种方式应对简单的情况很容易,但是随着要求越来越复杂,布局的难度会迅速提高。本文介绍另外一种方式:grid布局管理器。
grid这个英文单词是格子,网格的意思。顾名思义,grid布局管理器的工作方式就是设想将父窗口空间划分为网格,并在网格中布置控件。
例如如下的小窗口就可以看做一个三行两列的网格。
![7541ce6aa9bd779c53f7eabb140975de.png](https://i-blog.csdnimg.cn/blog_migrate/1491010cd56fb4b62f1ea702db89040a.jpeg)
这个画面可以用如下代码构建:
from tkinter import *root = Tk()Label(root, text="用户名").grid(row=0, sticky=W)Label(root, text="密码").grid(row=1, sticky=W)Entry(root).grid(row=0, column=1, sticky=E)Entry(root).grid(row=1, column=1, sticky=E)Button(root, text="Cancel").grid(row=2, column=0, sticky=E)Button(root, text="Login").grid(row=2, column=1, sticky=E)root.mainloop()
从代码中可以看出grid方法以供使用了3个参数:
row:指定控件所在行,缺省值为下一行。
column:指定控件所在列,缺省值为0
sticky:可选值包括NW,N,NE,W,E,SW,S,SE。这些值可以理解为地图上的方位,例如NE就是东北。下图是一个示意图表明每个取值在布局网格中的位置。
![a6b8ca0b07fd04b985bc6214c9e9ff1e.png](https://i-blog.csdnimg.cn/blog_migrate/90bc5b9f357a98f85e4c09faaedbf1db.jpeg)
这些取值也可以组合使用,例如E+W的效果就是水平拉伸空间。当我们如下方式修改生成Login按钮的代码时,
Button(root, text="Login").grid(row=2, column=1, sticky=E+W)
可以得到如下的布局,Login按钮已经铺满了网格(2,1):
![5821578e67ca50dc0f7a6833fac70e7c.png](https://i-blog.csdnimg.cn/blog_migrate/2da27299e4a12362ce0e4f7a52d2e7e6.jpeg)
如果觉的这个布局还是不够美观,也可以考虑按照如下方式布局:
![784c4db631f2a3c94506401ffbc3c87d.png](https://i-blog.csdnimg.cn/blog_migrate/fde31b61a12f7f5e8ec5c950836fc9ec.jpeg)
我们希望水平方向上每个编辑框占用两个网格。这是需要使用如下参数:
columnspan:指定水平方向上控件占有的网格数。
rowspan:指定垂直方向上控件占有的网格数。
代码如下:
from tkinter import *root = Tk()Label(root, text="用户名").grid(row=0, sticky=W)Label(root, text="密码").grid(row=1, sticky=W)Entry(root).grid(row=0, column=1, sticky=E, columnspan=2)Entry(root).grid(row=1, column=1, sticky=E, columnspan=2)Button(root, text="Cancel").grid(row=2, column=1, sticky=E+W)Button(root, text="Login").grid(row=2, column=2, sticky=E+W)root.mainloop()
代码除了为编辑框指定columnspan的值为2之外,还将两个按钮的sticky值指定为E+W以占满所处的网格。
![f7de85e3cecb4ee6a162baf72c2a7593.png](https://i-blog.csdnimg.cn/blog_migrate/406ee6979096e8869730c5968be2b09e.jpeg)
总的来说grid布局管理器,简明易懂,使用灵活,是目前Tkinter推荐的布局方式。
觉得本文有帮助?请分享给更多人。
关注【面向对象思考】,轻松学习每一天!
有任何疑问,欢迎留言提问或讨论。
面向对象设计,面向对象编程,面向对象思考!