图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
interface 界面,接口,交界面
Tkinter模块已经在python中内置,所以在使用前直接导入即可,两种导入方式:
import tkinter as tk—-导入tkinter,但没有引入任何组件,在使用时需要使用tk前缀,如需要引入按钮,则表示为:tk.Button
from tkinter import *—-将tkinter中的所有组件一次性导入。
构建和运行GUI程序的步骤
-导入tkinter模块
-创建一个顶层窗口
-在顶层窗口的基础上构建所需的GUI模块和功能
-将每个模块与底层代码关联起来
-执行主循环
tkinter主要的组件及组建的属性、集合管理方法
主要组件
Button 按钮控件;在程序中显示按钮。
Canvas 画布控件;显示图形元素如线条或文本
Checkbutton 多选框控件;用于在程序中提供多项选择框
Entry 输入控件;用于显示简单的文本内容
Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label 标签控件;可以显示文本和位图
Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton 菜单按钮控件,由于显示菜单项。
Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message 消息控件;用来显示多行文本,与label比较类似
Radiobutton 单选按钮控件;显示一个单选的按钮状态
Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。
Text 文本控件;用于显示多行文本
Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox 输入控件;与Entry类似,但是可以指定输入范围值
PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox 用于显示你应用程序的消息框。
标准属性
Dimension 控件大小;
Color 控件颜色;
Font 控件字体;
Anchor 锚点;
Relief 控件样式;
Bitmap 位图;
Cursor 光标;
几何管理
Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,一下是Tkinter公开的几何管理类:包、网格、位置
几何方法 描述
pack() 包装;
grid() 网格;
place() 位置;
注意
Tk使用了一种包管理所有的组件当定义完组件之后,需要调用pack()方法来控制组件的显示方式,若不调用pack()方法,组件将不会显示
在交互环境下,编写Tkinter测试代码时,运行过Tk()之后即进入主循环,可以看到顶层窗口,而若运行py文件,一定要调用mainloop()方法进入主循环,方可拷打顶层窗口
顶层窗口也称为根窗口,包括一个标题栏和窗口管理器和窗口装饰部分,一个Tkinter开发的应用程序中,值需要创建一个顶层窗口,并且此窗口必须建立其他窗口建立之前
创建GUI应用程序窗口代码的模块
from Tkinter import
tk=TK()
…
tk.mainloop()
Label组件常用参数
height 组件高度
width 组件宽度
fg 前景字体颜色
bg 背景颜色
justify 多行文本的对齐方式,可选参数有:LEFT、CENTER、RIGHT
padx 文本左右两侧的空格数
pady 文本上下两侧的空格数
框架(Frame)
框架相对于其他组件而言,它只是个容器,因为它没有方法,但它可以捕获键盘和鼠标的事件来进行回调
框架一般用作包含一组空间的主体,且可以制定外观
1.Label 控件
示例1:
#!/user/bin/env python
import Tkinter
top=Tkinter.Tk() #进行实例化,创建顶层窗口
label=Tkinter.Label(top,text='Hello World!')
label.pack()
Tkinter.mainloop() #一般这是程序运行的最后一段代码;加入服务
按钮(Button)
按钮可以禁用,如果将按钮放在 TAB群里,就可以使用TAB键来进行跳转和定位
Button组件参数
height 组件高度
width 组件宽度
fg 前景字体颜色
bg 背景颜色
activebackground 按钮按下时的背景颜色
avtiveforeground 按钮按下时前景颜色
justify 多行文本的对齐方式,可选参数:LEFT、CENTER、RIFGT
padx 文本左右两侧的空格数(默认为1)
pady 文本上下两侧的空格数(默认为1)
state 设置组件状态,默认为NORMAL,可设置为:DISABLED–禁用组件
2.Button 控件
#!/user/bin/env python
import Tkinter
top=Tkinter.Tk()
quit=Tkinter.Button(top,text='Hello World!',command=top.quit)
#Tkinter.quit()方法,该参数会给按钮安装一个回调函数,当按钮被按下(并且释放)后,整个程序就会退出。
quit.pack()
Tkinter.mainloop()
3.Label 和Button控件
#!/user/bin/env python
import Tkinter
top=Tkinter.Tk()
hello=Tkinter.Label(top,text='Hello World!')
hello.pack()
quit=Tkinter.Button(top,text='QUIT',command=top.quit,bg='red',fg='white')
quit.pack(fill=Tkinter.X,expand=1)
#fill参数告诉Packer让QUIT按钮占据剩余的水平空间,而expand参数则会引导它填充整个水平可视空间,将按钮拉伸到左右窗口边缘。
Tkinter.mainloop()
4.Label、Button和Scale控件
#!/usr/bin/env python
from Tkinter import *
def resize(ev=None):
label.config(font='Helvetica -%d bold' % \
scale.get())
#resize()回调函数,该函数会依附于Scale控件。当Scale控件的滑块移动时,这个函数就会被激活,用来调整Label控件中的文本大小。
top = Tk()
top.geometry('250x150')
#定义顶层窗口的大小为250*150
label = Label(top, text='Hello World!',
font='Helvetica -12 bold')
label.pack(fill=Y, expand=1)
scale = Scale(top, from_=10, to=40,
orient=HORIZONTAL, command=resize)
scale.set(12) #初始位置
scale.pack(fill=X, expand=1)
#Scale滑块用来控制Label控件中中文字体大小的工具
quit = Button(top, text='QUIT',
command=top.quit, activeforeground='white',
activebackground='red')
#activebackground 按钮按下时的背景颜色 ;avtiveforeground 按钮按下时前景颜色
quit.pack()
mainloop()
输入框(Entry)
可以为输入框设置默认值,也可以禁止用户输入,当用户输入的内容一行显示不下的时候,输入框自动生成滚动条
Entry组件常用参数
height 组件的高度
width 组件的宽度
fg 前景字体颜色
bg 背景颜色
show 将Entry框中的文本替换为制定字符,用于输入密码等,如设置show=“*”
state 设置组件状态,默认为NORMAL,可设置为:DISABLED–禁用组件,READONLY–只读
5.偏函数应用示例
#!/usr/bin/env python
from functools import partial as pto
from Tkinter import Tk, Button, X
from tkMessageBox import showinfo, showwarning, showerror
WARN = 'warn'
CRIT = 'crit'
REGU = 'regu'
SIGNS = {
'do not enter': CRIT,
'railroad crossing': WARN,
'55\nspeed limit': REGU,
'wrong way': CRIT,
'merging traffic': WARN,
'one way': REGU,
}
critCB = lambda : showerror('Error', 'Error Button Pressed!')
warnCB = lambda : showwarning('Warning',
'Warning Button Pressed!')
infoCB = lambda : showinfo('Info', 'Info Button Pressed!')
top = Tk()
top.title('Road Signs')
Button(top, text='QUIT', command=top.quit,
bg='red', fg='white').pack()
MyButton = pto(Button, top)
CritButton = pto(MyButton, command=critCB, bg='white', fg='red')
WarnButton = pto(MyButton, command=warnCB, bg='goldenrod1')
ReguButton = pto(MyButton, command=infoCB, bg='white')
for eachSign in SIGNS:
signType = SIGNS[eachSign]
cmd = '%sButton(text=%r%s).pack(fill=X, expand=True)' % (
signType.title(), eachSign,
'.upper()' if signType == CRIT else '.title()')
eval(cmd)
#简单地说:%r是repr,而%s是str;也就是说用%r的占位符将显示带引号的字符串,而用%s的占位符显示的是字符串的内容
top.mainloop()
补充:
(1)占位符%r和%s:
例:
>>> str = 'Hello, world!'
>>> print '%s' % str
Hello, world! # 不带引号
>>>print '%r' % str
'Hello, world!' # 带引号的字符串
(2)