Tkinter教程之Pack篇
本文转载自:http://blog.csdn.net/jcodeer/article/details/1813077
'''Tkinter教程之Pack篇''' #Pack为一布局管理器,可将它视为一个弹性的容器
#Pack为一布局管理器,可将它视为一个弹性的容器 '''1.一个空的widget'''
'''1.一个空的widget''' #不使用pack
#不使用pack # -*- coding: cp936 -*-
# -*- coding: cp936 -*- from Tkinter import *
from Tkinter import * root = Tk()
root = Tk() # 查看当前root下的子组件,解释器没有报异常,说明Pack已创建,并可以使用,此时的输出为空,即root没有任何子组件。
# 查看当前root下的子组件,解释器没有报异常,说明Pack已创建,并可以使用,此时的输出为空,即root没有任何子组件。 print root.pack_slaves()
print root.pack_slaves() # 向root中pack一个Label
# 向root中pack一个Label Label(root,text = 'pack').pack()
Label(root,text = 'pack').pack() # 再次打印出root的子组件,可以看到已经包含一个组件,即刚才创建的Label,说明Label调用pack()是将自己加入到了root中。
# 再次打印出root的子组件,可以看到已经包含一个组件,即刚才创建的Label,说明Label调用pack()是将自己加入到了root中。 print root.pack_slaves()
print root.pack_slaves() root.mainloop()
root.mainloop() # pack_salves打印当前组件包拥有的子组件,通过这个函数可以查看各个组件是否有包含关系。
# pack_salves打印当前组件包拥有的子组件,通过这个函数可以查看各个组件是否有包含关系。 '''2.root与Pack的关系'''
'''2.root与Pack的关系''' # -*- coding: cp936 -*-
# -*- coding: cp936 -*- # 使用文字create_text
# 使用文字create_text from Tkinter import *
from Tkinter import * root = Tk()
root = Tk() # 改变root的大小为80x80
# 改变root的大小为80x80 root.geometry('80x80+0+0')
root.geometry('80x80+0+0') print root.pack_slaves()
print root.pack_slaves() Label(root,text = 'pack').pack()
Label(root,text = 'pack').pack() print root.pack_slaves()
print root.pack_slaves() root.mainloop()
root.mainloop() #可以看出Pack的结果没有什么变化,它不对root产生影响,也就是说Pack可以“缩小”至只包含一个Label组件,root可以自己控件自己的大小。
#可以看出Pack的结果没有什么变化,它不对root产生影响,也就是说Pack可以“缩小”至只包含一个Label组件,root可以自己控件自己的大小。 '''3.向Pack中添加多个组件'''
'''3.向Pack中添加多个组件''' # -*- coding: cp936 -*-
# -*- coding: cp936 -*- # 向Pack中添加多个Label
# 向Pack中添加多个Label from Tkinter import *
from Tkinter import * root = Tk()
root = Tk() # 改变root的大小为80x80
# 改变root的大小为80x80 root.geometry('80x80+0+0')
root.geometry('80x80+0+0') print root.pack_slaves()
print root.pack_slaves() for i in range(5):
for i in range(5): Label(root,text = 'pack' + str(i)).pack()
    Label(root,text = 'pack' + str(i)).pack() print root.pack_slaves()
print root.pack_slaves() root.mainloop()
root.mainloop() # 使用用默认的设置pack将向下添加组件,第一个在最上方,然后是依次向下排列。注意最后一个Label的显示不完全,稍后解释原因
# 使用用默认的设置pack将向下添加组件,第一个在最上方,然后是依次向下排列。注意最后一个Label的显示不完全,稍后解释原因 '''4.固定设置到自由变化'''
'''4.固定设置到自由变化''' # 上例中看到label4没有显示完全
# 上例中看到label4没有显示完全 # -*- coding: cp936 -*-
# -*- coding: cp936 -*- # 不设置root的大小,使用默认
# 不设置root的大小,使用默认 from Tkinter import *
from Tkinter import * root = Tk()
root = Tk() #去掉下面的这句
#去掉下面的这句 #root.geometry('80x80+0+0')
#root.geometry('80x80+0+0') print root.pack_slaves()
print root.pack_slaves() for i in range(5):
for i in range(5): Label(root,text = 'pack' + str(i)).pack()
    Label(root,text = 'pack' + str(i)).pack() print root.pack_slaves()
print root.pack_slaves() root.mainloop()
root.mainloop() #使用用默认的设置pack将向下添加组件,第一个在最上方,然后是依次向下排列。这样的话最后一个已经显示出来的,这就是为什么称Pack为弹性的容器的原因了,虽然有这个特性,但它并不是总是能够按照我们的意思进行布局,我们可以强制设置容器的大小,以覆盖Pack的默认设置。Pack的优先级低。
#使用用默认的设置pack将向下添加组件,第一个在最上方,然后是依次向下排列。这样的话最后一个已经显示出来的,这就是为什么称Pack为弹性的容器的原因了,虽然有这个特性,但它并不是总是能够按照我们的意思进行布局,我们可以强制设置容器的大小,以覆盖Pack的默认设置。Pack的优先级低。 '''5.fill如何控制子组件的布局'''
'''5.fill如何控制子组件的布局''' # -*- coding: cp936 -*-
# -*- coding: cp936 -*- # 不设置root的大小,使用默认
# 不设置root的大小,使用默认 from Tkinter import *
from Tkinter import * root = Tk()
root = Tk() # 改变root的大小为80x80
# 改变root的大小为80x80 root.geometry('80x80+0+0')
root.geometry('80x80+0+0') print root.pack_slaves()
print root.pack_slaves() # 创建三个Label分别使用不同的fill属性
# 创建三个Label分别使用不同的fill属性 Label(root,text = 'pack1',bg = 'red').pack(fill = Y)
Label(root,text = 'pack1',bg = 'red').pack(fill = Y) Label(root,text = 'pack2',bg = 'blue').pack(fill = BOTH)
Label(root,text = 'pack2',bg = 'blue').pack(fill = BOTH) Label(root,text = 'pack3',bg = 'green').pack(fill = X)
Label(root,text = 'pack3',bg = 'green').pack(fill = X) print root.pack_slaves()
print root.pack_slaves() root.mainloop()
root.mainloop() #第一个只保证在Y方向填充,第二个保证在XY两个方向上填充,第三个不使用填充属性,注意Pack只会吝啬地给出可以容纳这三个组件的最小区域,它不允许使用剩余的空间了,故下方留有“空白”。
#第一个只保证在Y方向填充,第二个保证在XY两个方向上填充,第三个不使用填充属性,注意Pack只会吝啬地给出可以容纳这三个组件的最小区域,它不允许使用剩余的空间了,故下方留有“空白”。 '''6.expand如何控制组件的布局'''
'''6.expand如何控制组件的布局''' # -*- coding: cp936 -*-
# -*- coding: cp936 -*- # 这个属性指定如何使用额外的空间,即上例中留下来的“空白”
# 这个属性指定如何使用额外的空间,即上例中留下来的“空白” from Tkinter import *
from Tkinter import * root = Tk()
root = Tk() # 改变root的大小为80x80
# 改变root的大小为80x80 root.geometry('80x80+0+0')
root.geometry('80x80+0+0') print root.pack_slaves()
print root.pack_slaves() # 创建三个Label分别使用不同的fill属性
# 创建三个Label分别使用不同的fill属性 Label(root,text = 'pack1',bg = 'red').pack(fill = Y,expand = 1)
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 = 'pack2',bg = 'blue').pack(fill = BOTH,expand = 1) Label(root,text = 'pack3',bg = 'green').pack(fill = X,expand = 0)
Label(root,text = 'pack3',bg = 'green').pack(fill = X,expand = 0) print root.pack_slaves()
print root.pack_slaves() root.mainloop()
root.mainloop() # 第一个只保证在Y方向填充,第二个保证在XY两个方向上填充,第三个不使用填充属性,这个例子中第一个Label和第二个Label使用了expand = 1属性,而第三个使用expand = 0属性,改变root的大小,可以看到Label1和Label2是随着root的大小变化而变化(严格地它的可用空间在变化),第三个只中使用fill进行X方向上的填充,不使用额外的空间。
# 第一个只保证在Y方向填充,第二个保证在XY两个方向上填充,第三个不使用填充属性,这个例子中第一个Label和第二个Label使用了expand = 1属性,而第三个使用expand = 0属性,改变root的大小,可以看到Label1和Label2是随着root的大小变化而变化(严格地它的可用空间在变化),第三个只中使用fill进行X方向上的填充,不使用额外的空间。 '''7.改变组件的排放位置'''
'''7.改变组件的排放位置''' # 使用side属性改变放置位置
# 使用side属性改变放置位置 # -*- coding: cp936 -*-
# -*- coding: cp936 -*- from Tkinter import *
from Tkinter import * root = Tk()
root = Tk() # 改变root的大小为80x80
# 改变root的大小为80x80 root.geometry('80x80+0+0')
root.geometry('80x80+0+0') print root.pack_slaves()
print root.pack_slaves() # 创建三个Label分别使用不同的fill属性,改为水平放置
# 创建三个Label分别使用不同的fill属性,改为水平放置 # 将第一个Label居左放置
# 将第一个Label居左放置 Label(root,text = 'pack1',bg = 'red').pack(fill = Y,expand = 1,side = LEFT)
Label(root,text = 'pack1',bg = 'red').pack(fill = Y,expand = 1,side = LEFT) # 将第二个Label居右放置
# 将第二个Label居右放置 Label(root,text = 'pack2',bg = 'blue').pack(fill = BOTH,expand = 1,side = RIGHT)
Label(root,text = 'pack2',bg = 'blue').pack(fill = BOTH,expand = 1,side = RIGHT) # 将第三个Label居左放置,靠Label放置,注意它不会放到Label1的左边
# 将第三个Label居左放置,靠Label放置,注意它不会放到Label1的左边 Label(root,text = 'pack3',bg = 'green').pack(fill = X,expand = 0,side = LEFT)
Label(root,text = 'pack3',bg = 'green').pack(fill = X,expand = 0,side = LEFT) print root.pack_slaves()
print root.pack_slaves() root.mainloop()
root.mainloop() # 第一个只保证在Y方向填充,第二个保证在XY两个方向上填充,第三个不使用填充属性,这个例子中第一个Label和第二个Label使用了expand = 1属性,而第三个使用expand = 0属性,改变root的大小,可以看到Label1和Label2是随着root的大小变化而变化(严格地它的可用空间在变化),第三个只中使用fill进行X方向上的填充,不使用额外的空间。
# 第一个只保证在Y方向填充,第二个保证在XY两个方向上填充,第三个不使用填充属性,这个例子中第一个Label和第二个Label使用了expand = 1属性,而第三个使用expand = 0属性,改变root的大小,可以看到Label1和Label2是随着root的大小变化而变化(严格地它的可用空间在变化),第三个只中使用fill进行X方向上的填充,不使用额外的空间。 '''8.设置组件之间的间隙大小'''
'''8.设置组件之间的间隙大小''' # ipadx设置内部间隙
# ipadx设置内部间隙 # padx设置外部间隙
# padx设置外部间隙 # -*- coding: cp936 -*-
# -*- coding: cp936 -*- # 不设置root的大小,使用默认
# 不设置root的大小,使用默认 from Tkinter import *
from Tkinter import * root = Tk()
root = Tk() # 改变root的大小为80x80
# 改变root的大小为80x80 # root.geometry('80x80+0+0')
# root.geometry('80x80+0+0') print root.pack_slaves()
print root.pack_slaves() # 创建三个Label分别使用不同的fill属性,改为水平放置
# 创建三个Label分别使用不同的fill属性,改为水平放置 # 将第一个LabelFrame居左放置
# 将第一个LabelFrame居左放置 L1 = LabelFrame(root,text = 'pack1',bg = 'red')
L1 = LabelFrame(root,text = 'pack1',bg = 'red') # 设置ipadx属性为20
# 设置ipadx属性为20 L1.pack(side = LEFT,ipadx = 20)
L1.pack(side = LEFT,ipadx = 20) Label(L1,
Label(L1, text = 'inside',
      text = 'inside', bg = 'blue'
      bg = 'blue' ).pack(expand = 1,side = LEFT)
      ).pack(expand = 1,side = LEFT) L2 = Label(root,
L2 = Label(root, text = 'pack2',
           text = 'pack2', bg = 'blue'
           bg = 'blue' ).pack(fill = BOTH,expand = 1,side = LEFT,padx = 10)
           ).pack(fill = BOTH,expand = 1,side = LEFT,padx = 10) L3 = Label(root,
L3 = Label(root, text = 'pack3',
           text = 'pack3', bg = 'green'
           bg = 'green' ).pack(fill = X,expand = 0,side = LEFT,pady = 10)
           ).pack(fill = X,expand = 0,side = LEFT,pady = 10) print root.pack_slaves()
print root.pack_slaves() root.mainloop()
root.mainloop() #为了演示ipadx/padx,创建了一个LabelFrame设置它的ipadx为20,即内部间隔值为20,它的子组件若使用则会留出20个单位;Label2和Label3分别设置x和y方向上的外部间隔值,所有与之排列的组件会与之保留10个单位值的距离
#为了演示ipadx/padx,创建了一个LabelFrame设置它的ipadx为20,即内部间隔值为20,它的子组件若使用则会留出20个单位;Label2和Label3分别设置x和y方向上的外部间隔值,所有与之排列的组件会与之保留10个单位值的距离
Tkinter教程之Pack篇的更多相关文章
- Tkinter教程之Canvas篇(2)
		本文转载自:http://blog.csdn.net/jcodeer/article/details/1811888 '''Tkinter教程之Canvas篇(2)''''''9.创建item的tag ... 
- Tkinter教程之Grid篇
		本文转载自:http://blog.csdn.net/jcodeer/article/details/1813196 '''Tkinter教程之Grid篇'''# Tkinter参考中最推荐使用的一个 ... 
- Tkinter教程之Canvas篇(4)
		本文转载自:http://blog.csdn.net/jcodeer/article/details/1812091 '''Tkinter教程之Canvas篇(4)''''''22.绘制弧形'''# ... 
- Tkinter教程之Canvas篇(3)
		本文转载自:http://blog.csdn.net/jcodeer/article/details/1811922 ''Tkinter教程之Canvas篇(3)''''''16.移动item'''# ... 
- Tkinter教程之Canvas篇(1)
		本文转载自:http://blog.csdn.net/jcodeer/article/details/1811803 '''Tkinter教程之Canvas篇(1)'''# 提供可以用来进行绘图的Co ... 
- Tkinter教程之Text篇(3)
		本文转载自:http://blog.csdn.net/jcodeer/article/details/1811348 '''Tkinter教程之Text篇(3)''''''14.自定义tag的两个内置 ... 
- Tkinter教程之Toplevel篇
		本文转载自:http://blog.csdn.net/jcodeer/article/details/1811341 '''Tkinter教程之Toplevel篇'''#TopLevel与Frame类 ... 
- Tkinter教程之Frame篇
		本文转载自:http://blog.csdn.net/jcodeer/article/details/1811339 '''Tkinter教程之Frame篇'''#Frame就是屏幕上的一块矩形区域, ... 
- Tkinter教程之Message篇
		本文转载自:http://blog.csdn.net/jcodeer/article/details/1811326 '''Tkinter教程之Message篇'''#Message也是用来显示文本的 ... 
随机推荐
- C# 时间函数
			DateTime dt = DateTime.Now; string str = dt.ToString("yyyy-MM-dd");//2013-09-07 str = dt.T ... 
- ossec 常用命令及目录说明
			1. /var/www/html/analogi -> ossec 第三方的web界面的安装目录 [root@ossec-server ~]# cd /var/www/html/analogi/ ... 
- Java API —— 多线程
			1.多线程概述 1)进程: 正在运行的程序,是系统进行资源分配和调用的独立单位. 每一个进程都有它自己的内存空间和系统资源. 2)线程: ... 
- 转:[Android问答] 开发环境问题集锦
			工欲善其事,必先利其器. 和iOS开发相比,Android的开发环境的版本比较多,随之而来的问题也多.显然,我们不应该浪费宝贵的时间在解决开发环境带来的问题上,为此本文总结了常见的开发环境问题和解决方 ... 
- struts2中token防止重复提交表单
			struts2中token防止重复提交表单 >>>>>>>>>>>>>>>>>>>&g ... 
- Java开发之单例设计模式
			设计模式之单例模式: 一.单例模式实现特点:①单例类在整个应用程序中只能有一个实例(通过私有无参构造器实现):②单例类必须自己创建这个实例并且可供其他对象访问(通过静态公开的访问权限修饰的getIns ... 
- 基于XMPP的即时通信系统的建立(二)— XMPP详解
			XMPP详解 XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理和现场协议)是一种在两个地点间传递小型结构化数据的协议.在此基础上,XMPP ... 
- I.MX6 Ethernet UI patch failed
			/*********************************************************************** * I.MX6 Ethernet UI patch f ... 
- 04day2
			中位数 排序 [问题描述] 给出 1~n 的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是 b.中位数是指把所有元素从小到大排列后,位于中间的数.n<=100000 [输入] 第一 ... 
- windows 下FFMPEG的编译方法 附2012-9-19发布的FFMPEG编译好的SDK下载
			经过一晚上加一上午的奋斗,终于成功编译出了最新版的FFMPEG,下面是我编译的心得,因为是最新的,应该会对大家有用,编译的FFMPEG的版本是0.11.2,2012-09-19新发布的版本 平台:WI ... 
