Tkinter教程之Pack篇

原创 2007年10月06日 15:59:00
'''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个单位值的距离

 

[Tkinter 教程12] 布局管理 (Pack Place Grid)

本文译自:  http://www.python-course.eu/tkinter_layout_management.php 这个系列的 tkinter 文章图文并茂, 查了一堆教程, 就这个讲的...
  • liuxu0703
  • liuxu0703
  • 2017年01月14日 21:16
  • 7257

Tkinter pack grid place函数详细介绍

Tkinter参考中最推荐使用的一个布局器。实现机制是将Widget逻辑上分割成表格,在指定的位置放置想要的Widget就可以了。 使用grid显示窗体的主要流程: self.thing ...
  • qq_25600055
  • qq_25600055
  • 2015年07月30日 17:26
  • 2189

Python Tkinter Grid布局管理器详解

Grid(网格)布局管理器会将控件放置到一个二维的表格里。主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件。 什么时候使用Grid管理器 grid管理器是Tkint...
  • wangyiyan315
  • wangyiyan315
  • 2013年11月19日 14:15
  • 24890

Tkinter教程之Pack篇

'''Tkinter教程之Pack篇''' # Pack为一布局管理器,可将它视为一个弹性的容器 '''1.一个空的widget''' # 不使用pack # -*- coding: utf-8 -*...
  • aa1049372051
  • aa1049372051
  • 2016年07月12日 10:47
  • 7813

Python-Tkinter教程之Frame篇

__author__ = 'xianhua.meng' # encoding: utf-8 #!/usr/bin/python '''Tkinter教程之Frame篇''' #Frame就是屏幕上的...
  • mengxianhua
  • mengxianhua
  • 2014年10月28日 10:15
  • 23426

Tkinter教程之Frame篇

Tkinter教程之Frame篇#Frame就是屏幕上的一块矩形区域,多是用来作为容器(container)来布局窗体。1.创建Frame# -*- coding: cp936 -*-from Tki...
  • jcodeer
  • jcodeer
  • 2007年10月04日 19:23
  • 9329

Python GUI之tkinter布局管理

所谓布局,就是指控制窗体容器中各个控件(组件)的位置关系。tkinter 共有三种几何布局管理器,分别是:pack布局,grid布局,place布局。 pack布局 使用 pack布局,将向容...
  • yingshukun
  • yingshukun
  • 2017年01月02日 23:08
  • 16426

Perl Tk pack布局示例

use Tk; use strict; use DBI; # Main Window my $mw = new MainWindow; my $but1 = $mw -> Button(-tex...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2015年01月19日 21:34
  • 841

Python的Tk里的pack属性fill和expand

expand置1 使能fill属性 expand置0 关闭fill属性 fill=X 当GUI窗体大小发生变化时,widget在X方向跟随GUI窗体变化 fill=Y 当GUI窗体大小发生变化时...
  • weixin_40982642
  • weixin_40982642
  • 2017年11月09日 09:12
  • 139

pack布局

Chapter 2. Geometry Management 第2章 布局管理: 显示部件在屏幕上,他们必须被传递给布局管理器。 布局管理器 控制部件的位置和大小 在显示窗口,几个布局管理器...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2016年03月09日 13:44
  • 389
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tkinter教程之Pack篇
举报原因:
原因补充:

(最多只允许输入30个字)