常用Python GUI库有:
1.Tkinter
2.WxPython
3.PyQT
4.pyGtk
5.Jython
6.MFC
7.PythonCard
8.Dabo
9.AnyGui
10.WPY
11.IronPython
其中
Tkinter
模块
(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .
Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
Python2.x中的为
Tkinter
而Python3.x中的为
tkinter
GUI编程前,先导入:import Tkinter
Tkinter组件(即类)(15种)
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。
参考:http://www.runoob.com/python/python-gui-tkinter.html
标准属性(变量):
标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。
Dimension、
Color、
Font、
Anchor、
Relief、
Bitmap、
Cursor(光标)
详细说明参考:https://my.oschina.net/TyLucifer/blog/112961
几何管理(方法或函数):
Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,一下是Tkinter公开的几何管理类:包、网格、位置
pack()、
grid()、place()
Label控件:
Label 控件用以显示文字和图片. Label 通常被用来展示信息, 而非与用户交互.
class Label(Widget):Label类继承Widget类 """Label widget which can display text and bitmaps."""
控件标签能够显示文本和图片
类的初始化函数(构造函数) def __init__(self, master=None, cnf={}, **kw):
第一个是self,即类对象本身。
第二个是master,在Tkinter中,一个控件可能属于另一个控件,这时另一个控件就是这个控件的master。默认一个窗口没有master,因此master有None的默认值。
第三个cnf不了解
第四个是kw为命名关键字参数,
"""Construct a label widget with the parent MASTER. STANDARD OPTIONS:
标准选项(属性)
activebackground, activeforeground, anchor, background, bitmap, borderwidth, cursor, disabledforeground, font, foreground, highlightbackground, highlightcolor, highlightthickness, image, justify, padx, pady, relief, takefocus, text, textvariable, underline, wraplength
WIDGET-SPECIFIC OPTIONS height, state, width """
调用BaseWidget中的初始化函数
Widget.__init__(self, master, 'label', cnf, kw)
class Widget(BaseWidget, Pack, Place, Grid):Widget类继承BaseWidget, Pack, Place, Grid类
"""Internal class.
Base class for a widget which can be positioned with the geometry managers
Pack, Place or Grid."""
小部件的基类,它可以定位于几何管理器。包、位置或网格。
pass
1、背景自定义
背景,有三部分构成:内容区+填充区+边框
<1>
内容区
参数有:
width
,
length
用于指定区域大小,如果显示前景内容是文本,则以单个字符大小为单位;如果显示的是图像,则以像素为单位。默认值是根据具体显示的内容动态调整。类型是int。
background
用于指定背景的颜色,默认值根据系统而定。
<2>
填充区
参数
:指的是内容区和边框之间的间隔大小,单位是像素。参数有:
padx , pady
,类型是int。
<3>
边框
参数:样式
relief
(可选值为:flat(默认),sunken,raised,groove,ridge),
borderwidth
(边框的宽度,单位是像素,默认根据系统而定,一般是1或2像素)
highlightbackground
,
highlightcolor
,
highlightthickness
三个边框参数仅在Label允许接收焦点的情况下(
tackfocus
=True),用于设置焦点获取前后高亮边框颜色以及高亮边框宽度。
2、前景自定义
前景定义分为
文本内容
和
图像
两小块来说明。
2.1文本
文本内容选项有:<1>指定
字体和字体大小
,如:
font
= (font_name,size),默认有系统指定。
<2>文本
对齐方式
,
justify
= “center(默认)left/right/”
<3>指定
文本(或图像)颜色
,
foreground
= “指定的颜色”,可以是英文名字,也可以是RGB格式的
<4>指定
文本内容
:(静态的)
text
= “目标字符串…..”; (动态更新的)
textvariable
= str_obj,当str_obg的内容改变时,会更新Label中对应内容。
这里需要注意的是str_obj必须是TKinter所支持的字符串类型变量,如:str_obj = Tkinter.StringVar() str_obj.set(“目标文本内容”)
<5>单个字符添加
下划线
,
underline
= index, index是目标字符串中的字符索引值。
<6>文本或图像在背景内容区的位置:
anchor
可选值为(n,s,w,e,ne,nw,sw,se,center)eswn是东南西北英文的首字母
2.2图像
图像内容选项有:<1>指定图片:
bitmap
= bitmap_image,当指定image选项的时候,这个参数会被忽略掉 或者
image
= normal_image(仅支持GIF, PPM/PGM格式的图片)” 。
需要注意的是这里的所用到的图片对象bitmap_image normal_image都是需要经过TKinter转换后的图像格式。
如: bitmap_image = TKinter.BitmapImage(file = “位图片路径”)
normal_image = TKinter.PhotoImage(file = “gif 、ppm/pgm图片路径”)
图片和文本取舍:
compound
参数可以控制要显示的文本和图像。当同时指明了要显示的文本和图像时,可以通过该参数来进行不同设置。
可选值:None 默认值,表示只显示图像,不显示文本;bottom/top/left/right,表示图片显示在文本的下/上/左/右;center,表示文本显示在图片中心上方。
3、Label的其他参数
<1>
activebacakground
activeforground
用于设置Label处于活动(active)状态下的背景和前景颜色,默认由系统指定。
<2>
diableforground
指定当Label不可用的状态(Disable)下的前景颜色,默认由系统指定。
<3>
cursor
指定鼠标经过Label的时候,鼠标的样式,默认由系统指定。
<4>
state
指定Label的状态,用于控制Label如何显示。可选值有:normal(默认)/active/disable。
参考:http://www.cnblogs.com/zyq-blog/p/5712926.html
属性用法:
fg(foreground)
:
前景色
bg(background)
:
背景色
设置背景色的一个大的用处是:可以判断控件的大小(不同的控件使用不同的颜色。
width
:
宽度
一个汉字约为2个单位
height
:
高度
与默认的汉字高度约一致
指文本所在区域,文本默认区域居中
from Tkinter import *
root=Tk()
Lab1=Label(root,bg='red',text='床前明月光').pack()
Lab2=Label(root,bg='Green',text='疑是地上霜').pack()
Lab3=Label(root,bg='Yellow',text='举头望明月').pack()
Lab11=Label(root,bg='red',text='床前明月光',width=16,height=6).pack()
Lab22=Label(root,bg='Green',text='疑是地上霜',width=18,height=8).pack()
Lab33=Label(root,bg='Yellow',text='举头望明月',width=12,height=12).pack()
root.mainloop()
compound:
指定文本
(
text
)
与图像
(
bitmap
/
image
)
是如何在Label上显示,缺省为None,当指定image
/
bitmap时,文本
(
text
)
将被覆盖,只显示图像了。
left
:
图像居左
right
:
图像居右
top
: 图像居上
bottom:图像居下
center:文字覆盖在图像上
bitmap/image:
显示在Label
上的图像
text
:
显示在Label
上的文本
from Tkinter import *
#创建界面窗口
Win=Tk()
#只能显示GIF格式的图片
img=PhotoImage(file="D:/temp/1.gif")
#Label是个类,对其初始化
# #pack属性将空间加载到窗口上
#文本内容显示窗口
lab1=Label(Win,text="Hello World!",fg='red',image=img,bg='green',compound='right').pack()
lab2=Label(Win,text="Hello World!",fg='black',image=img,bg='red',compound='left').pack()
lab3=Label(Win,text="Hello World!",fg='red',image=img,bg='blue',compound='center').pack()
# 启动 Tkinter 的消息循环 (event loop)
Win.mainloop()
wraplength
:
指定多少单位后开始换行(经测试默认字体情况下,一个汉字或中文标点的长度大约
wraplength=12单位,一个英文字符(字母,标点等)占6~9个单位,
不清楚为什么没有规律
)根据文本中的字符占位,设置
wraplength个单位后,字符换行
justify
:
指定多行的
对齐方式,必须是 left, right, or center
ahchor
:
指定文本
(
text
)
或图像
(
bitmap
/
image
)
在Label
中的显示位置(方位)
可用的值:
e、w、n、s、ne、se、sw、sn、center
布局如下图:类似空间平面中的8个方位
nw(左上) n (中上) ne(右上)
w (左中) center(中间) e(右中)
sw(左下) s (中下) se(右下)
from Tkinter import *
root=Tk()
#每行显示一句:每句5个汉字加一个中文标点符号(英文为6)warplength=5*12+12
Lab1=Label(root,bg='red',text='床前明月光,疑是地上霜,举头望明月,低头思故乡。',width=24,height=4,wraplength=72,justify='left').pack()
#height与默认的汉字高度约一致,一个汉字约为2个单位的width
Lab2=Label(root,bg='Green',text='疑是地上霜',width=18,height=5,wraplength=12,anchor='nw').pack()
Lab3=Label(root,bg='Yellow',text='举头望明月',width=18,height=2,anchor='ne',justify='right').pack()
root.mainloop()
justify
与anchor的
区别
了:一个用于控制
多行的对齐
;另一个用于控制
整个文本
块在Label中的位置
边界框的使用。
from Tkinter import * root=Tk() img=PhotoImage(file='D:/temp/1.gif') Lab1=Label(root, bg='blue', text='床前明月光,疑是地上霜,举头望明月,低头思故乡。', fg='purple', relief="groove", # 中心框主要是显示窗口内容(文字、图片) width=360, height=360, wraplength=72, justify='left', anchor = "s", # padx/pady次边框(内容边界加宽) padx=10, pady=10, # 外层框与窗口连接的(边界修饰) borderwidth=20, #图像显示在底部 image=img, compound='bottom').pack() root.mainloop()
使用PhotoImage和BitmapImage显示bmp或gif文件
示例:
from Tkinter import *
#创建界面窗口
Win=Tk()
#只能显示GIF格式的图片
img=PhotoImage(file="D:/temp/1.gif")
#Label是个类,对其初始化
# #pack方法将空间加载到窗口上
#图片显示在窗口左边
lab1=Label(Win,image=img).pack(side='left')
#文本内容显示窗口右边,字体颜色为红色
lab2=Label(Win,text="Hello World!",font=6,fg='red',padx=100,pady=100).pack(side='right')
# 启动 Tkinter 的消息循环 (event loop)
Win.mainloop()
Label窗口部件上调用了pack方法,它告诉Label窗口部件去调整自己的尺寸来适应所给定文本的大小,并且使用自己可见。
mainloop()方法作用:将一直处在事件循环之中,直到我们关闭了这个窗口。事件循环不仅仅处理来自用户的事件(如鼠标敲击和按键按下)或者窗口系统(重绘事件和窗口配置消 息),它也处理来自Tkinter自身的工作等待队列,这些工作之一就包括由pack方法所产生的工作和显示更新。这就意味着这个应用程序窗口在进入这个 事件循环之前将不会显示出来。
Pack:pack几何管理器通过在一个帧中把窗口部件
包装
到一个父部件中来创建一个版面。为了对窗口部件使用这个几何管理器,我们在这个窗口部件上使用pack方法。