l GUI Graphical User Interfaces

l tkinter模块

n 是Python系统配置的标准GUI库

n 采用tkinter模块编写的界面可以在所有主流操作系统上运行

l 从应用的角度来看,Python中的GUI实际上都是C扩展包的实例。脚本建立按钮和菜单时,最终是和一个C库发生对话;脚本响应用户事件后,最终由一个C库作出回应

l 名词汇总

n canvas组件:canvas意味帆布,油画布,canvas组件用来绘图

l 如果要开发商业级的GUI项目,学习完基础知识后,还需要研究一下Pmw,PIL,Tix,ttk等扩展包,可以节省开发时间,界面更好看

l tkinter的结构

n tkinter字面意思是Python与Tk库进行交互,Tk是一个GUI库

n 实现结构:Python通过tkinter模块与Tk库交流,tkinter设计为一个结合体,其一是用Python编码的tkinter模块包,其二是用C编写的扩展模块_tkinter,_tkinter与Tk库发生交互

l 创建组件

n widget = Label(None, text = ‘hello GUI World’)

u 第一个参数是父组件对象,将新标签设置其中,这里None表示将新标签设置在该程序的默认顶层窗口。稍后,我们会向该位置传递其他组件的实际位置,并将标签设置在其他组件充当的容器对象内

u 第二个参数是标签配置选项,是关键字参数,不同的关键字设定不同的内容

n root = Tk()

u Tk表示程序的主窗口,一般是未设定时的默认组件,注意一些组件生成新的弹出窗口,这些窗口独立于主程序窗口

l 组件尺寸调整

n Label(text = ‘hello world’).pack(expand = YES, fill = BOTH)

n expand要求打包几何管理器为组件扩展空间

n fill选项用来拉伸组件,使其充满分配的空间

n 注意fill=BOTH和fill=X以及fill=Y的区别

u X是水平方向无限拉伸,Y是竖直方向

u expand=YES是指需要拉伸,默认是不拉伸的

l 设置组件选项和窗口标题

n from tkinter import *

n root = Tk()

n widget = Label(root)

n widget.config(text = ‘Hello World!’)

n widget.pack(side=TOP, expand = YES, fill = BOTH)

n root.title(‘hello.py’)

n root.mainloop()

l 添加按钮和回调函数

n 组件的command选项来记录按钮按下时,回调处理函数的返回位置,即按钮按下时tkinter需要调用的行为

n 添加用户自定义的回调函数

u def hello():

l print(‘Hello!’)

l sys.exit()

u root = Tk()

u widget = Button(root)

u widget = config(text = ‘Hello World’, command = hello)

u widget.pack(side = TOP, expand= YES, fill = Y)

u root.title(‘Hello.py’)

u root.mainloop()

l 细节

n Label().pack()

u 创建标签之后,立即调用对象的pack方法安排在屏幕中显示,而label对象只是暂时存在的,由于没有为其分配名字,因此运行完pack方法后,会被GC回收并释放空间

u 同时注意pack()返回的是空对象,不要pack完了再赋值给一个名字

n 注意import

u 版本小于3.0的,from Tkinter import Label

u 版本大于等于3.0的,from tkinter import Label