当前位置:   article > 正文

《tkinter实用教程四》tkinter 布局管理 Grid(1)_tkinter grid

tkinter grid

虽然, tkinter 提供了多种控制布局的方式,但我还是建议使用 grid 处理所有布局问题。

下面,本文将聚焦 grid 布局管理方式,如果你有学习其他布局方式的需要,可以留言给我,我会在后继章节优先更新其他布局方式。

行与列

grid 布局中的所有控件都会被赋予一个行号和一个列号,这是每个控件相对于其他控件位置的凭证。

同一列控件上下排布,同一行控件左右排布。

行与列的宽度和高度由内部的控件决定,在使用 grid 布局时,不需要关注行和列的大小。

使用 grid 布局

使用 grid 按钮非常简单,只需要在创建控件之后,指定控件放置的表格行号和列号就可以了。

示例代码如下:


from tkinter import *

from tkinter import ttk



root = Tk()

btn1 = ttk.Button(text="第一个按钮") # 创建按钮

btn2 = ttk.Button(text="第二个按钮")

btn3 = ttk.Button(text="第三个按钮")

btn1.grid(column=0,row=0)           # 放置按钮

btn2.grid(column=1,row=1)

btn3.grid(column=2,row=2)



root.mainloop()



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

以上代码创建了三个按钮,排列在窗口左上到右下的对角线上,如下图所示:

三个按钮

控件跨行、跨列放置

有些时候,会有一些较大的控件,需要占据多行、多列的窗口空间,此时就需要在指定空间位置时额外指定占据的行数和列数。

示例代码如下:


from tkinter import *

from tkinter import ttk



root = Tk()

s = ttk.Style()

s.configure('1.TFrame',background='red')



btn1 = ttk.Button(root,text="第一个按钮") # 创建按钮

btn2 = ttk.Button(root,text="第二个按钮")

ety1 = ttk.Entry(root)

frm  = ttk.Frame(root,width=200,height=200,style='1.TFrame')



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

btn2.grid(column=1,row=0)

ety1.grid(column=0,row=1,columnspan=2)      # 使用 columnspan 跨越两列

frm.grid(column=0,row=2,columnspan=2,rowspan=2)



root.mainloop()



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

代码执行效果如下:

colspan

以上代码涉及了两个还没有介绍到的控件 ttk.Entryttk.Frame ,后继都会更新上的。

ipadx、ipady参数

这两个可选参数类似于 css 样式中的 padding,属于内边距。

ipadx:内部横向填充,添加到控件内部的左侧和右侧。

ipady:内部纵向填充,添加到控件内部的上侧和下侧。

代码示例如下:


from tkinter import *

from tkinter import ttk



root = Tk()

btn = ttk.Button(root,text="一个按钮")

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

btn2 = ttk.Button(root,text="两个按钮")

btn2.grid(column=0,row=1,ipadx=10)

btn3 = ttk.Button(root,text='三个按钮')

btn3.grid(column=0,row=2,ipady=10)

btn4 = ttk.Button(root,text="四个按钮")

btn4.grid(column=0,row=3,ipady=10,ipadx=10)



root.mainloop()



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

代码执行结果如下图:

在这里插入图片描述

按钮控件的内部被填充了额外的控件,变得臃肿。

padx、pady 参数

padxpady 参数属于外边距,类似于 css 样式中的 margin 参数。

padx:外部横向填充,添加到控件外部的左侧和右侧。

pady:外部纵向填充,添加到控件外部的上侧和下侧。

示例代码如下:


from tkinter import *

from tkinter import ttk



root = Tk()

btn = ttk.Button(root,text="一个按钮")

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

btn2 = ttk.Button(root,text="两个按钮")

btn2.grid(column=0,row=1,pady=10)

btn3 = ttk.Button(root,text='三个按钮')

btn3.grid(column=0,row=2)

btn4 = ttk.Button(root,text="四个按钮")

btn4.grid(column=1,row=0,padx=10)



root.mainloop()



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

代码执行结果如下图:

在这里插入图片描述

第二个和第四个按钮因为增加了外边距和其他按钮中间产生了空隙。

sticky 参数

sticky 选项确定如何在单元格内分配控件件未以其自然大小占用的任何额外空间。

如果不指定 sticky 参数,控件将居于单元格中部,未占据的额外控件均匀分布四周。

sticky 有四个可选值,分别为:NSWE,分别对应上、下、左、右。

sticky=(N,S) 使控件上下方向拉伸,并保持横向居中。

sticky=(W,E) 使控件左右方向拉伸,并保持上下居中。

示例代码如下:


from tkinter import *

from tkinter import ttk



root = Tk()

btn1 = ttk.Button(root,text="第一个按钮")

btn2 = ttk.Button(root,text="第二个按钮")

btn3 = ttk.Button(root,text="第三个按钮")

btn4 = ttk.Button(root,text="第四个按钮")

btn5 = ttk.Button(root,text="第五个按钮")



btn1.grid(column=0,row=0,sticky=N)

btn2.grid(column=0,row=1,sticky=E)

btn3.grid(column=0,row=2,sticky=W)

btn4.grid(column=0,row=3,sticky=S)

btn5.grid(column=0,row=4,sticky=(E,W))



root.columnconfigure(0,weight=1)

root.rowconfigure(2,weight=1)

root.rowconfigure(3,weight=1)



root.mainloop()



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

代码执行结果:

在这里插入图片描述

rowconfigurecolumnconfigure 方法可以设定每个行和列的比例,我们可以通过这种方式使控件伴随窗口大小变化,自动适应。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
34855489)]

[外链图片转存中…(img-d7RoSeGc-1715034855489)]

[外链图片转存中…(img-i6l9qY2Z-1715034855489)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/942119
推荐阅读
相关标签
  

闽ICP备14008679号