Tkinter布局管理器

Tkinter是Python的标准GUI库,提供Pack、Grid和Place等布局管理器来设计界面。Pack按照顺序自动排列控件,Grid使用网格布局,而Place允许绝对定位。布局管理对于创建美观、灵活和易维护的GUI至关重要。文章详细介绍了这三种布局管理器的使用和应用场景,并通过示例代码展示了它们的功能。
摘要由CSDN通过智能技术生成

Tkinter是Python的标准GUI库,提供了多种布局管理器来帮助开发者设计GUI界面。以下是Tkinter中常用的布局管理器:

  1. Pack布局管理器:将控件按照添加的顺序自动排列,可以设置控件的位置、填充方式和间距等属性。

  2. Grid布局管理器:将控件按照网格布局排列,可以设置控件的行列位置、跨度、对齐方式和间距等属性。

  3. Place布局管理器:通过指定控件的绝对位置和大小来排列控件,适用于需要精确控制控件位置和大小的场景。

  4. Frame布局管理器:将多个控件组合在一个框架中,可以使用其他布局管理器来进一步排列框架内的控件。

使用布局管理器可以使GUI界面更加美观、灵活和易于维护。开发者可以根据实际需求选择合适的布局管理器来设计GUI界面。

当我们在开发一个 GUI 程序的时候,布局管理发挥着非常重要的作用,它指的是通过管理控件在窗口中的位置(排版),从而实现对窗口和控件布局的目的。

一个优秀的图形用户界面,更像是艺术家的作品,它会给用户非常良好的感官体验,因此布局管理不单单是枯燥的程序代码,更需要以“美”的角度去审视每一个细节,这才是学习布局管理的“不二法门”。Tkinter 提供了一系列布局管理的方法和容器控件,通过对这些内容的学习,您将掌握如何使用不同的方法完成界面布局。

Tkinter 提供了三种常用的布局管理器,分别是 pack()、grid() 以及 place(),如下表所示:

方法 说明
pack() 按照控件的添加顺序其进行排列,遗憾的是此方法灵活性较差
grid() 以行和列(网格)形式对控件进行排列,此种方法使用起来较为灵活
place() 可以指定组件大小以及摆放位置,三个方法中最为灵活的布局方法
上述三种方法适用于 Tkinter 中的所有控件,在讲解前面内容时,对其中一些方法已经做了相关的介绍,比如 pack() 和 grid()。在本节会对上述三个方法的应用场景做更为详细的介绍。
pack()
pack() 是一种较为简单的布局方法,在不使用任何参数的情况下,它会将控件以添加时的先后顺序,自上而下,一行一行的进行排列,并且默认居中显示。pack() 方法的常用参数如下所示:

属性 说明
anchor 组件在窗口中的对齐方式,有 9 个方位参数值,比如"n"/“w”/“s”/“e”/“ne”,以及 “center” 等(这里的 e w s n分别代表,东西南北)
expand 是否可扩展窗口,参数值为 True(扩展)或者 False(不扩展),默认为 False,若设置为 True,则控件的位置始终位于窗口的中央位置
fill 参数值为 X/Y/BOTH/NONE,表示允许控件在水平/垂直/同时在两个方向上进行拉伸,比如当 fill = X 时,控件会占满水平方向上的所有剩余的空间。
ipadx,ipady 需要与 fill 参数值共同使用,表示组件与内容和组件边框的距离(内边距),比如文本内容和组件边框的距离,单位为像素§,或者厘米©、英寸(i)
padx,pady 用于控制组件之间的上下、左右的距离(外边距),单位为像素§,或者厘米©、英寸(i)
side 组件放置在窗口的哪个位置上,参数值 ‘top’,‘bottom’,‘left’,‘right’。注意,单词小写时需要使用字符串格式,若为大写单词则不必使用字符串格式
下面看一组简单的使用示例:
from tkinter import *
win = Tk()
win.title(“C语言中文网”)
win.geometry(‘450x300+300+300’)
win.iconbitmap(‘C:/Users/Administrator/Desktop/C语言中文网logo.ico’)
lb_red = Label(win,text=“红色”,bg=“Red”,fg=‘#ffffff’,relief=GROOVE)

默认以top方式放置

lb_red.pack()
lb_blue = Label(win,text=“蓝色”,bg=“blue”,fg=‘#ffffff’,relief=GROOVE)

沿着水平方向填充,使用 pady 控制蓝色标签与其他标签的上下距离为 5 个像素

lb_blue.pack(fill=X,pady=‘5px’)
lb_green = Label(win,text=“绿色”,bg=“green”,fg=‘#ffffff’,relief=RAISED)

将 黄色标签所在区域都填充为黄色,当使用 fill 参数时,必须设置 expand = 1,否则不能生效

lb_green.pack(side=LEFT,expand=1,fill = BOTH)
win.mainloop()
程序运行结果:
tkinter pack布局管理
图1:pack()布局管理
grid()
grid() 函数是一种基于网格式的布局管理方法,相当于把窗口看成了一张由行和列组成的表格。当使用该 grid 函数进行布局的时,表格内的每个单元格都可以放置一个控件。,从而实现对界面的布局管理。
注意:这里的所说的“表格”是虚拟出来,目的是便于大家理解,其实窗体并不会因为使用了 gird() 函数,而增加一个表格。

grid() 函数的常用参数如下所示:

属性 说明
column 控件位于表格中的第几列,窗体最左边的为起始列,默认为第 0 列
columnsapn 控件实例所跨的列数,默认为 1 列,通过该参数可以合并一行中多个领近单元格。
ipadx,ipady 用于控制内边距,在单元格内部,左右、上下方向上填充指定大小的空间。
padx,pady 用于控制外边距,在单元格外部,左右、上下方向上填充指定大小的空间。
row 控件位于表格中的第几行,窗体最上面为起始行,默认为第 0 行
rowspan 控件实例所跨的行数,默认为 1 行,通过该参数可以合并一列中多个领近单元格。
sticky 该属性用来设置控件位于单元格那个方位上,参数值和 anchor 相同,若不设置该参数则控件在单元格内居中
grid() 方法相比 pack() 方法来说要更加灵活,以网格的方式对组件进行布局管理,让整个布局显得非常简洁、优雅。如果说非要从三个布局管理器中选择一个使用的话,那么我推荐大家使用 grid() 方法。
这里有一点需要大家要特别注意,在一个程序中不能同时使用 pack() 和 grid() 方法,这两个方法只能二选一,否则程序会运行错误。

下面看一组有关 grid() 函数的简单的示例:
纯文本复制
from tkinter import *
#主窗口
win = Tk()
win.config(bg=‘#87CEEB’)
win.title(“C语言中文网”)
win.geometry(‘500x350+300+300’)
win.iconbitmap(‘C:/Users/Administrator/Desktop/C语言中文网logo.ico’)
#在窗口内创建按钮,以表格的形式依次排列
for i in range (10):
for j in range (10):
Button (win, text=" (" + str(i) + “,”+ str(j)+ “)”,bg=‘#D1EEEE’) .grid(row=i,column=j)

在第5行第11列添加一个Label标签

Label(win,text=“C语言中文网”,fg=‘blue’,font=(‘楷体’,12,‘bold’)).grid(row =4,column=11)
#开始窗口的事件循环
win. mainloop()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个VB6的IDE插件(Addin),使用VB6的IDE直接设计Python的界面。 Python和VB都是能让人快乐的编程语言,我使用了Python之后,很多自己使用的工具都使用Python开发或改写了,因为最终实现的Python代码实在太短了(相比VB),有时候Python一行代码就可以实现VB一个函数的功能。 Python就是这种让人越用越开心的语言。 不过说实在,使用Python开发GUI界面还是麻烦了一些了,自带的标准库Tkinter使用起来非常简单,不过对于习惯了VB拖放控件完成界面设计的偶来说,还是不够人性化。TK也有一个工具叫GUI Builder,不过它使用Layout布局,不够直观,而且用起来很不爽。。 至于PyQt/wxPython等GUI库,尽管有可视化设计工具,但总感觉做一般的轻量级应用是杀鸡用牛刀, 而且不够环保,不够低碳,要带一个很大的库,需要目标机器上夜同样安装了PyQt/wxPython,做不了绿色软件。 所以最终的结果是我更喜欢Tkinter,用起来很简单,绿色环保,真正的跨平台,一个py文件到处运行(担心泄密就编译成pyc)。 很多人都认为TK的界面不够美观,不过我经过多次实验后发现导入Python自带的标准TTK主题库,界面非常Native,不输PyQt/wxPython。 此Addin默认启用TTK支持,也可选择关闭。 总而言之,轻量级GUI,TK+TTK足够。 使用此Addin,你可以不用写一句代码就可以生成一个完整可运行的Python的GUI界面,支持2.X和3.X。 安装方法:将压缩包解压到你希望的目录,然后执行Setup.exe完成注册插件过程,打开VB6就可以用了。 在VB窗体上设计完成界面后(你可以大胆的设置各控件的属性,Addin尽量将其翻译为tkinter的控件属性),点工具栏上的VisualTkinter(图标为一片羽毛),再点'生成代码'按钮,即可生成可运行的Python代码,可以拷贝至剪贴板或保存至文件。 一般情况下你可以不用再改变tkinter的控件属性,但是如果你熟悉tkinter,需要更多的控制,可以一一核对各属性,并且修改,再生成代码。 当然除了用来设计界面外,此ADDIN内置的各控件属性列表可以做为编程参考,比较完整,除了极少数我认为大多数人都不用的属性外,属性定义基本上是我从官方的tkinter文档直接翻译的。 如果还没有VB6,网上找一个VB6精简版即可,不到20M,小巧玲珑。 代码已经在Github上托管,更新的版本可以在这上面找到,需求也可以在上面提: https://github.com/cdhigh/Visual-Tkinter-for-Python
Tkinter 布局管理器是用于指定窗口中部件位置和大小的机制。Tkinter 布局管理器有三种类型:pack(), grid() 和 place()。下面是它们的详细说明: 1. pack():这是最简单的布局管理器,它会自动将窗口中的部件放置在可用空间中的最小框架内。它的语法如下: widget.pack(options) 2. grid():这个布局管理器将窗口分成行和列,并将部件放置在这些行和列中。它的语法如下: widget.grid(options) 3. place():这个布局管理器允许您直接指定部件的位置和大小。它的语法如下: widget.place(options) 在使用布局管理器时,您可以为部件指定各种选项,例如:位置,大小,填充,边距等。以下是一些常见的选项: - side:部件应该放置在窗口的哪一侧,可以是 LEFT,RIGHT,TOP 或 BOTTOM。 - padx,pady:部件周围的 X 和 Y 方向填充。 - fill:指定填充部件的方向。可以是 BOTH,X,Y 或 NONE。 - expand:如果为 True,则部件将占据可用空间。 - rowspan 和 columnspan:指定部件所占的行数和列数。 下面是一个使用 pack() 布局管理器的示例代码: ``` import tkinter as tk root = tk.Tk() label1 = tk.Label(root, text="Label 1", bg="red") label1.pack(side="left", padx=10, pady=10) label2 = tk.Label(root, text="Label 2", bg="green") label2.pack(side="left", padx=10, pady=10) label3 = tk.Label(root, text="Label 3", bg="blue") label3.pack(side="left", padx=10, pady=10) root.mainloop() ``` 以上代码将在窗口左侧放置三个标签,并在它们之间添加 10px 的填充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值