Tkinter教程之Pack篇

Tkinter布局管理器Pack详解
本文详细介绍了Tkinter中的Pack布局管理器,包括Pack如何添加组件,如何控制组件的布局,如fill和expand属性的使用,以及如何调整组件间的间隙。通过实例展示了Pack如何动态适应窗口大小变化。
AI助手已提取文章相关产品:
'''Tkinter教程之Pack篇'''
#Pack为一布局管理器,可将它视为一个弹性的容器
'''1.一个空的widget'''
#不使用pack
#
 -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
# 查看当前root下的子组件,解释器没有报异常,说明Pack已创建,并可以使用,此时的输出为空,即root没有任何子组件。
print root.pack_slaves()
# 向root中pack一个Label
Label(root,text = 'pack').pack()
# 再次打印出root的子组件,可以看到已经包含一个组件,即刚才创建的Label,说明Label调用pack()是将自己加入到了root中。
print root.pack_slaves()
root.mainloop()
# pack_salves打印当前组件包拥有的子组件,通过这个函数可以查看各个组件是否有包含关系。
'''2.root与Pack的关系'''
# -*- coding: cp936 -*-
#
 使用文字create_text
from Tkinter import *
root 
= Tk()
# 改变root的大小为80x80
root.geometry('80x80+0+0')
print root.pack_slaves()
Label(root,text 
= 'pack').pack()
print root.pack_slaves()
root.mainloop()
#可以看出Pack的结果没有什么变化,它不对root产生影响,也就是说Pack可以“缩小”至只包含一个Label组件,root可以自己控件自己的大小。
'''3.向Pack中添加多个组件'''
# -*- coding: cp936 -*-
#
 向Pack中添加多个Label
from Tkinter import *
root 
= Tk()
# 改变root的大小为80x80
root.geometry('80x80+0+0')
print root.pack_slaves()
for i in range(5):
    Label(root,text 
= 'pack' + str(i)).pack()
print root.pack_slaves()
root.mainloop()
# 使用用默认的设置pack将向下添加组件,第一个在最上方,然后是依次向下排列。注意最后一个Label的显示不完全,稍后解释原因
'''4.固定设置到自由变化'''
# 上例中看到label4没有显示完全
#
 -*- coding: cp936 -*-
#
 不设置root的大小,使用默认
from Tkinter import *
root 
= Tk()
#去掉下面的这句
#
root.geometry('80x80+0+0')
print root.pack_slaves()
for i in range(5):
    Label(root,text 
= 'pack' + str(i)).pack()
print root.pack_slaves()
root.mainloop()
#使用用默认的设置pack将向下添加组件,第一个在最上方,然后是依次向下排列。这样的话最后一个已经显示出来的,这就是为什么称Pack为弹性的容器的原因了,虽然有这个特性,但它并不是总是能够按照我们的意思进行布局,我们可以强制设置容器的大小,以覆盖Pack的默认设置。Pack的优先级低。
'''5.fill如何控制子组件的布局'''
# -*- coding: cp936 -*-
#
 不设置root的大小,使用默认
from Tkinter import *
root 
= Tk()
# 改变root的大小为80x80
root.geometry('80x80+0+0')
print root.pack_slaves()
# 创建三个Label分别使用不同的fill属性
Label(root,text = 'pack1',bg = 'red').pack(fill = Y)
Label(root,text 
= 'pack2',bg = 'blue').pack(fill = BOTH)
Label(root,text 
= 'pack3',bg = 'green').pack(fill = X)
print root.pack_slaves()
root.mainloop()
#第一个只保证在Y方向填充,第二个保证在XY两个方向上填充,第三个不使用填充属性,注意Pack只会吝啬地给出可以容纳这三个组件的最小区域,它不允许使用剩余的空间了,故下方留有“空白”。
'''6.expand如何控制组件的布局'''
# -*- coding: cp936 -*-
#
 这个属性指定如何使用额外的空间,即上例中留下来的“空白”
from Tkinter import *
root 
= Tk()
# 改变root的大小为80x80
root.geometry('80x80+0+0')
print root.pack_slaves()
# 创建三个Label分别使用不同的fill属性
Label(root,text = 'pack1',bg = 'red').pack(fill = Y,expand = 1)
Label(root,text 
= 'pack2',bg = 'blue').pack(fill = BOTH,expand = 1)
Label(root,text 
= 'pack3',bg = 'green').pack(fill = X,expand = 0)
print root.pack_slaves()
root.mainloop()
# 第一个只保证在Y方向填充,第二个保证在XY两个方向上填充,第三个不使用填充属性,这个例子中第一个Label和第二个Label使用了expand = 1属性,而第三个使用expand = 0属性,改变root的大小,可以看到Label1和Label2是随着root的大小变化而变化(严格地它的可用空间在变化),第三个只中使用fill进行X方向上的填充,不使用额外的空间。
'''7.改变组件的排放位置'''
# 使用side属性改变放置位置
#
 -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
# 改变root的大小为80x80
root.geometry('80x80+0+0')
print root.pack_slaves()
# 创建三个Label分别使用不同的fill属性,改为水平放置
#
 将第一个Label居左放置
Label(root,text = 'pack1',bg = 'red').pack(fill = Y,expand = 1,side = LEFT)
# 将第二个Label居右放置
Label(root,text = 'pack2',bg = 'blue').pack(fill = BOTH,expand = 1,side = RIGHT)
# 将第三个Label居左放置,靠Label放置,注意它不会放到Label1的左边
Label(root,text = 'pack3',bg = 'green').pack(fill = X,expand = 0,side = LEFT)
print root.pack_slaves()
root.mainloop()
# 第一个只保证在Y方向填充,第二个保证在XY两个方向上填充,第三个不使用填充属性,这个例子中第一个Label和第二个Label使用了expand = 1属性,而第三个使用expand = 0属性,改变root的大小,可以看到Label1和Label2是随着root的大小变化而变化(严格地它的可用空间在变化),第三个只中使用fill进行X方向上的填充,不使用额外的空间。
'''8.设置组件之间的间隙大小'''
# ipadx设置内部间隙
#
 padx设置外部间隙
#
 -*- coding: cp936 -*-
#
 不设置root的大小,使用默认
from Tkinter import *
root 
= Tk()
# 改变root的大小为80x80
#
 root.geometry('80x80+0+0')
print root.pack_slaves()
# 创建三个Label分别使用不同的fill属性,改为水平放置
#
 将第一个LabelFrame居左放置
L1 = LabelFrame(root,text = 'pack1',bg = 'red')
# 设置ipadx属性为20
L1.pack(side = LEFT,ipadx = 20)
Label(L1,
      text 
= 'inside',
      bg 
= 'blue'
      ).pack(expand 
= 1,side = LEFT)
L2 
= Label(root,
           text 
= 'pack2',
           bg 
= 'blue'
           ).pack(fill 
= BOTH,expand = 1,side = LEFT,padx = 10)
L3 
= Label(root,
           text 
= 'pack3',
           bg 
= 'green'
           ).pack(fill 
= X,expand = 0,side = LEFT,pady = 10)
print root.pack_slaves()
root.mainloop()
#为了演示ipadx/padx,创建了一个LabelFrame设置它的ipadx为20,即内部间隔值为20,它的子组件若使用则会留出20个单位;Label2和Label3分别设置x和y方向上的外部间隔值,所有与之排列的组件会与之保留10个单位值的距离

 

您可能感兴趣的与本文相关内容

好的,下面是一个简单的 Python tkinter 教程,希望对你有所帮助。 ## 简介 Tkinter 是 Python 的标准 GUI 库之一,使用它可以创建窗口、按钮、文本框、标签等各种 GUI 组件,是 Python 用于图形界面开发的主要工具之一。 ## 安装 Tkinter 是 Python 的标准库,通常情况下无需安装,只需要安装 Python 即可。如果你使用的是 Python 2.x 版本,则需要使用 Tkinter(注意大小写);如果你使用的是 Python 3.x 版本,则需要使用 tkinter(小写)。 ## 示例 下面是一个简单的 Python tkinter 示例,主要包括创建窗口、添加标签和按钮等操作。 ```python import tkinter as tk # 创建窗口 window = tk.Tk() window.title('Hello, World!') window.geometry('300x200') # 添加标签 label = tk.Label(window, text='Hello, World!', font=('Arial', 16)) label.pack() # 添加按钮 button = tk.Button(window, text='Click me!', command=window.quit) button.pack() # 运行窗口 window.mainloop() ``` 上述代码中,我们首先导入了 tkinter 库,并创建了一个名为 window 的窗口,设置了窗口标题和大小。然后,我们使用 tkinter.Label 类创建了一个名为 label 的标签,并将其添加到窗口中。接着,我们使用 tkinter.Button 类创建了一个名为 button 的按钮,并将其添加到窗口中。最后,我们使用 window.mainloop() 运行了窗口。 ## 组件 下面是一些常用的 tkinter 组件及其用法。 ### 标签 标签用于显示文本或图像,通常用来提供说明或提示信息。 ```python label = tk.Label(window, text='Hello, World!', font=('Arial', 16)) ``` 上述代码中,我们使用 tkinter.Label 类创建了一个名为 label 的标签,并设置了标签的文本和字体大小。 ### 按钮 按钮用于触发事件或执行操作,通常用来提交表单或执行计算等操作。 ```python button = tk.Button(window, text='Click me!', command=window.quit) ``` 上述代码中,我们使用 tkinter.Button 类创建了一个名为 button 的按钮,并设置了按钮的文本和点击事件(退出窗口)。 ### 文本框 文本框用于输入或编辑文本,通常用来接收用户输入或显示大段文本。 ```python text_box = tk.Text(window, height=5, width=30) ``` 上述代码中,我们使用 tkinter.Text 类创建了一个名为 text_box 的文本框,并设置了文本框的高度和宽度。 ### 输入框 输入框用于输入单行文本,通常用来接收用户输入或搜索关键词。 ```python input_box = tk.Entry(window, width=30) ``` 上述代码中,我们使用 tkinter.Entry 类创建了一个名为 input_box 的输入框,并设置了输入框的宽度。 ## 布局 在 tkinter 中,我们可以使用 pack、grid 和 place 等布局管理器来控制组件的位置和大小。 ### pack 布局 pack 布局是最简单的布局管理器,它将组件按照添加的顺序从上到下依次排列。 ```python label.pack() button.pack() ``` 上述代码中,我们使用 pack() 方法将标签和按钮依次排列。 ### grid 布局 grid 布局是一种基于网格的布局管理器,它将组件按照行和列的方式排列。 ```python label.grid(row=0, column=0) button.grid(row=1, column=0) ``` 上述代码中,我们使用 grid() 方法将标签放置在第一行第一列,将按钮放置在第二行第一列。 ### place 布局 place 布局是一种基于绝对坐标的布局管理器,它将组件放置在指定的位置上。 ```python label.place(x=50, y=50) button.place(x=100, y=100) ``` 上述代码中,我们使用 place() 方法将标签放置在 (50, 50) 的位置上,将按钮放置在 (100, 100) 的位置上。 ## 总结 以上就是一个简单的 Python tkinter 教程,涵盖了创建窗口、添加标签和按钮、使用布局管理器等基本操作。希望这教程能够帮助你入门 tkinter,更多详细内容可以查看 tkinter 的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值