当前位置:文档之家› 上海交通大学 python程序设计课程 Ch8-1

上海交通大学 python程序设计课程 Ch8-1

25
Pack布局管理器
• Pack以紧凑方式将构件在窗口中“打包”
– 设想窗口由弹性材料制成,放入构件时先把窗 口空间撑大到足够容纳该构件,然后将构件紧 贴内部的某条边(缺省是顶边)放入.
– 缺省情形下放入同一个窗口的所有构件是沿 垂直方向自顶向下一个紧贴一个进行布置的
可以通过pack方法的side选项设置成沿水平方向 打包.
24
布局
• 布局:界面元素在界面中的位置安排. • 布局管理器:程序员不需要了解底层显示
系统的细节, 在较高层次上考虑界面布局 • 构件都是先创建,再布局:
w = Constructor(parent,...) w.GeometryManager(...)
• Tkinter提供三种布局管理器:Pack,Grid 和Place
19
常用构件:文本编辑区
• 类Entry:单行文本编辑
e = Entry(窗口,选项设置) – textvariable:控制变量,是StringVar类的实例
• 例如
>>> v = StringVar() >>> e = Entry(root,textvariable = v) >>> e.pack() >>> print v.get() hello >>> v.set('new text')
4
事件驱动
• GUI程序的执行流程取决于与用户的实 时交互
– 例如:Word程序的执行
• 事件驱动编程
– 普通程序的执行:启动——做事——终止 – 事件驱动程序的执行:启动——事件循环
等待事件发生,然后处理 程序的终止也是由特定事件(如关闭窗口事件)引
起的
5
基本概念
• 事件:例如点击鼠标,按下键盘等. • 事件处理程序:对事件进行处理的代码. • 事件驱动编程:一种编程范型
• 标签Label • 按钮Button • 菜单Menu • 框架Frame
窗口W
框架F1 勾选钮C1
勾选钮C2
框架F2 OK Cancel
– 也是容器
3
构件之间的关系
• 父子关系
– 在一个构件内创建另一个构件 – 界面上全体构件形成一个层次结构 – 顶层是根窗口
• 父构件内安排子构件:使用布局管理器
一组单选钮共用一个控制变量
>>> v = IntVar() >>> v.set(1) >>> Radiobutton(root,text="One",variable=v,value=1).pack() >>> Radiobutton(root,text="Two",variable=v,value=2).pack() >>> Radiobutton(root,text="Three",variable=v,value=3).pack()
–程序有一个事件循环
事件监测
OS功能,由工具包提供支持
事件处理
应用程序员只需编写自己的事件处理程序
6
GUI编程
• 需要GUI工具包
– 将低层细节对程序员隐藏 – 跨平台 – Python标准库:Tkinter
• GUI编程
– 设计界面外观 – 为每个构件定义事件处理代码 – 建立启动初始化和总控部分
程序中可以通过v.get()和v.set()来查询或设置勾 选钮的状态
>>> v = IntVar() >>> Checkbutton(root,text="Check",variable=v).pack()
18
常用构件:单选钮
• 类:Radiobutton
rb = Radiobutton(窗口,选项设置) – value:每个单选钮对应一个值,用于控制变量 – variable:控制变量,值为IntVar类的实例
22
菜单编程例:eg8_4.py
def callback(): print "hello from menu"
root = Tk() m = Menu(root) root.config(menu = m) filemenu = Menu(m) m.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="New", command=callback) filemenu.add_command(label="Open...", command=callback) filemenu.add_separator() filemenu.add_command(label="Exit", command=callback) helpmenu = Menu(m) m.add_cascade(label="Help", menu=helpmenu) helpmenu.add_command(label="About...", command=callback)
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()
14
常用构件:标签
• 类:Label
lb = Label(窗口,选项设置) – text:标签文本内容 – width:标签宽度 – fg:前景色(文本颜色)
• 例如
>>> aLabel = Label(root,text="Hello World") >>> aLabel.pack() >>> Label(root,text='red color',fg='red').pack()
>>> def hiButton():
...
print 'hi there'
...
>>> Button(root,text='print',command=hiButton).pack()
17
常用构件:勾选钮
• 类:Checkbutton
cb = Checkbutton(窗口,选项设置) – text
21
常用构件:菜单
• 类Menu
– 创建菜单构件 – 与窗口关联 – 添加菜单项
菜单项:简单命令,级联式菜单,勾选钮,一组单选钮
• 例如
>>> m = Menu(root) >>> root.config(menu = m) >>> m.add_command(label="File") >>> m.add_command(label="Help")
10
在窗口中添加构件
• 构件对象有很多属性(实例变量):
– 创建时设置属性的值
属性一般都有缺省值 用"命名参数"方式设置较方便:属性=属性值
– 创建时不设置,将来再设置或修改
利用构件类的config方法: 对象.config(属性=属性值) 对象视为字典: 对象[属性]=属性值
11
根窗口
• 根窗口的标题设置
图形用户界面
程序的用户界面
• 程序中与用户进行交互的部分
– 用户通过UI向程序输入数据或者请求程序执 行特定任务
– 程序通过UI向用户显示各种信息
• UI应该是用户友好的 • 两类UI
– 命令行界面 – 图形界面(GU– 是容器:可以容纳其他构件的构件
– 程序有一个根窗口
23
常用构件:顶层窗口
• 类Toplevel
– 顶层窗口是根窗口的子构件,但有一定的独 立性:可以移动,改变大小.
– 根窗口只有一个,顶层窗口可有多个.
• 例如
>>> root = Tk() >>> Label(root,text="hello").pack() >>> top = Toplevel() >>> Label(top,text="world").pack() >>> top.title('hello toplevel') >>> top.geometry('400x300')
>>> Checkbutton(root,text="Math").pack() >>> Checkbutton(root,text="Python").pack() >>> Checkbutton(root,text="English").pack()
– variable:控制变量,值为IntVar类的实例
– 注意写法:对象创建与方法调用合二为一
15
常用构件:按钮
• 类:Button
btn = Button(窗口,选项设置) – text:按钮上的文本 – command:点击按钮时要执行的命令
相关主题