图形用户界面.ppt

上传人:本田雅阁 文档编号:3195850 上传时间:2019-07-29 格式:PPT 页数:21 大小:186.01KB
返回 下载 相关 举报
图形用户界面.ppt_第1页
第1页 / 共21页
图形用户界面.ppt_第2页
第2页 / 共21页
图形用户界面.ppt_第3页
第3页 / 共21页
图形用户界面.ppt_第4页
第4页 / 共21页
图形用户界面.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《图形用户界面.ppt》由会员分享,可在线阅读,更多相关《图形用户界面.ppt(21页珍藏版)》请在三一文库上搜索。

1、图形用户界面,事件驱动编程,2,2,GUI编程,首先:设计界面外观 用什么构件,怎么布局 其次:实现界面元素所对应的程序功能 事件驱动:功能代码的执行与构件关联,由针对构件的事件决定执行什么代码以及何时执行.,3,3,Tkinter事件描述,事件描述 “ 类型符:指定事件类型,如Button和Key 修饰符(可选):描述双击,组合键等 细节符(可选):指定具体鼠标或键盘按键 例如 “,4,4,常用鼠标事件,或或:单击左键 类似有和 :按下左键并移动 类似有和 :双击左键 和:鼠标指针进入/离开构件区域,5,5,常用键盘事件,或a:按下字母a 可打印字符都类似,但空格是,小于号是 注意:1和不同

2、! :按下回车键 非可打印字符都类似,如:, , , , , 等 :按下任意键 :同时按下Shift和键 类似的有Alt组合、Ctrl组合,6,6,事件对象,每个事件都创建一个事件对象(Event类的实例),并将该对象传递给事件处理函数 事件对象具有若干描述事件的属性: x和y:鼠标点击位置(相对于构件左上角) x_root和y_root:鼠标点击位置(相对于屏幕左上角) num:点击的鼠标键号(1、2、3) char:按下的字符(ASCII);如果按下特殊键则为空串 keysym:按下的字符(ASCII);如果按下特殊键则为该键的名称(是个字符串),7,7,7,事件处理,GUI应用程序在建立

3、图形界面等初始化工作后进入事件循环,等待事件发生并触发绑定的事件处理程序 mainloop()方法:进入事件循环 绑定:建立事件与事件处理程序间的对应,8,8,8,构件绑定事件,语法: .bind(,) 语义:若针对发生了与相匹配的事件,则调用 调用事件处理程序时,系统传递Event对象作为实参. 一般是由用户自定义的函数. 这种函数在应用程序中定义但不由应用程序调用,而是由系统调用,一般称为回调(callback)函数 GUI应用程序可封装为类,这时事件处理程序常定义为应用程序类的方法. (详后),9,9,9,例:框架绑定鼠标事件,eg8_6.py from Tkinter import *

4、 def callback(event): print “clicked at“,event.x,event.y root = Tk() f = Frame(root,width=100,height=100) f.bind(“,callback) f.pack() root.mainloop(),10,10,10,例:按钮绑定键盘事件,按键时,界面中哪个构件响应该键盘事件? 占有界面焦点的构件.例eg8_7.py: from Tkinter import * def printInfo(event): print “pressed“, event.char root = Tk() b = B

5、utton(root,text = Press any key) b.bind(,printInfo) b.focus_set() b.pack() root.mainloop(),11,11,11,例:绑定多个事件,按键时,界面中哪个构件响应该键盘事件? 占有界面焦点的构件.例eg8_7.py: from Tkinter import * def callback1(event): print “pressed“, event.char def callback2(event): f.focus_set() print “clicked at“, event.x, event.y root

6、= Tk() f = Frame(root,width=100,height=100) f.bind(“,callback1) f.bind(“,callback2) f.pack() root.mainloop(),12,12,12,应用程序作为对象,GUI编程经常将整个应用程序封装成类. 在类中建立图形界面,定义事件处理方法. 好处 事件处理函数是类的方法, 自然可以访问类中所有实例变量 只要将构件存储为实例变量,就能实现处理代码与图形界面的“无缝集成”.,例:程序类独立创建根窗口,class MyApp: def _init_(self): root = Tk() b = Button(

7、root,.) . root.mainloop() def f(): . app = MyApp(),13,例:程序类依赖外部根窗口,class MyApp: def _init_(self,master): f = Frame(master,.) b = Button(f,.) . root = Tk() app = MyApp(root) root.mainloop(),14,例:myapp.py,class MyApp: def _init_(self): self.root = Tk() self.t = Label(self.root,text=“Spam“) self.t.pack

8、() Button(self.root,text=“Play“,command=self.changeText).pack() Button(self.root,text=“Quit“,command=self.root.quit).pack() self.root.mainloop() self.root.destroy() def changeText(self): if self.t“text“ = “Spam“: self.t“text“ = “Egg“ else: self.t“text“ = “Spam“ app = MyApp(),15,16,16,16,模型-视图,复杂程序常可

9、分解成核心逻辑和用户界面两个部分 模型:为应用问题建模,管理应用问题的数据和行为,对来自UI的数据请求或数据更新指令进行响应 视图:负责显示模型的当前数据状态,响应用户的交互动作 模型和视图相互独立,可以分开设计和测试,17,17,17,模型-视图方法的优点,由于模型与视图的相对独立性,可以为一个模型配用不同的视图,以达到不同的目的. 后例中,先设计一个基于文本界面的简单视图来测试模型的正确性,然后再设计更美观易用的GUI视图,编程案例:汇率换算器,模型:存储当前汇率,进行外币与人民币之间的换算 类CCApp: ccapp.py 复杂程序也许需要多个类来实现模型 注意_init_的参数inter:代表程序的界面(尚未设计),18,基于文本的用户界面,先实现一个简单界面,以测试模型是否能正确工作. 类TextInterface: ti.py 测试CCApp和TextInterface是否能配合完成预定功能. testti.py,19,GUI,经测试模型没有问题,即可实现复杂的GUI. 类GUInterface: gui.py 测试CCApp和GUInterface是否能配合完成预定功能. testgui.py,20,21,21,End,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1