当前位置:文档之家› 上海交通大学python程序设计课程Ch81精品PPT课件

上海交通大学python程序设计课程Ch81精品PPT课件

图形用户界面
程序的用户界面
• 程序中与用户进行交互的部分
– 用户通过UI向程序输入数据或者请求程序执 行特定任务
– 程序通过UI向用户显示各种信息
• UI应该是用户友好的 • 两类UI
– 命令行界面 – 图形界面(GUI)
2
GUI构件
Байду номын сангаас
• 窗口Window
– 是容器:可以容纳其他构件的构件
– 程序有一个根窗口
>>> Checkbutton(root,text="Math").pack() >>> Checkbutton(root,text="Python").pack() >>> Checkbutton(root,text="English").pack()
– variable:控制变量,值为IntVar类的实例
–程序有一个事件循环
事件监测
OS功能,由工具包提供支持
事件处理
应用程序员只需编写自己的事件处理程序
6
GUI编程
• 需要GUI工具包
– 将低层细节对程序员隐藏 – 跨平台 – Python标准库:Tkinter
• GUI编程
– 设计界面外观 – 为每个构件定义事件处理代码 – 建立启动初始化和总控部分
from Tkinter import * root = Tk() root.mainloop()
9
在窗口中添加构件
• 两步:
– 创建 – 布局
• 例:eg8_2.py
from Tkinter import * root = Tk() aLabel = Label(root,text="Hello World") aLabel.pack() root.mainloop()
• 标签Label • 按钮Button • 菜单Menu • 框架Frame
窗口W
框架F1 勾选钮C1
勾选钮C2
框架F2 OK Cancel
– 也是容器
3
构件之间的关系
• 父子关系
– 在一个构件内创建另一个构件 – 界面上全体构件形成一个层次结构 – 顶层是根窗口
• 父构件内安排子构件:使用布局管理器
14
常用构件:标签
• 类:Label
lb = Label(窗口,选项设置) – text:标签文本内容 – width:标签宽度 – fg:前景色(文本颜色)
• 例如
>>> aLabel = Label(root,text="Hello World") >>> aLabel.pack() >>> Label(root,text='red color',fg='red').pack()
4
事件驱动
• GUI程序的执行流程取决于与用户的实 时交互
– 例如:Word程序的执行
• 事件驱动编程
– 普通程序的执行:启动——做事——终止 – 事件驱动程序的执行:启动——事件循环
等待事件发生,然后处理 程序的终止也是由特定事件(如关闭窗口事件)引
起的
5
基本概念
• 事件:例如点击鼠标,按下键盘等. • 事件处理程序:对事件进行处理的代码. • 事件驱动编程:一种编程范型
16
例:按钮
• 下例中按钮对应的函数是root对象的方法quit
>>> b=Button(root,text="Quit",command=root.quit) >>> b.pack() >>> root.mainloop() # 点击按钮退出主循环,回到>>>
• 下例中按钮对应的函数是自定义函数
>>> def hiButton():
...
print 'hi there'
...
>>> Button(root,text='print',command=hiButton).pack()
17
常用构件:勾选钮
• 类:Checkbutton
cb = Checkbutton(窗口,选项设置) – text
13
界面设计过程
• 根据需要创建多个构件,然后在窗口中进 行布局.
• 例:eg8_3.py
from Tkinter import * root = Tk() aLabel = Label(root,text="Hello World") aLabel.pack() aButton = Button(root,text="Click Me") aButton.pack() root.mainloop()
7
Tkinter的常用构件类
• Button • Canvas • Checkbutton • Entry • Frame • Label • Listbox • Menu • Message • Radiobutton • Text • Toplevel
8
最简单的Tkinter程序
• 导入Tkinter • 建立根窗口 • 进入事件循环 • 例:eg8_1.py
程序中可以通过v.get()和v.set()来查询或设置勾 选钮的状态
>>> v = IntVar() >>> Checkbutton(root,text="Check",variable=v).pack()
10
在窗口中添加构件
• 构件对象有很多属性(实例变量):
– 创建时设置属性的值
属性一般都有缺省值 用"命名参数"方式设置较方便:属性=属性值
– 创建时不设置,将来再设置或修改
利用构件类的config方法: 对象.config(属性=属性值) 对象视为字典: 对象[属性]=属性值
11
根窗口
• 根窗口的标题设置
– 注意写法:对象创建与方法调用合二为一
15
常用构件:按钮
• 类:Button
btn = Button(窗口,选项设置) – text:按钮上的文本 – command:点击按钮时要执行的命令
需要提供一个函数或方法名f
注意不是函数调用f()
– height,width – fg,bg – relief:RAISED/FLAT/SUNKEN/GROOVE/ – state:NORMAL/ACTIVE/DISABLED
root.title("My GUI") – 缺省值为"Tk"
• 根窗口的尺寸设置
root.geometry("400x400") – 缺省值为200x200
12
构件间的父子关系
• GUI中的所有构件按父子关系构成树状 层次结构
• 每个构件都有master和children属性
– Tkinter自动维护这两个属性的值 – 编程时可利用这两个属性,例如: aLabel.master.title("My GUI")
相关主题