图形用户界面ppt课件_第1页
图形用户界面ppt课件_第2页
图形用户界面ppt课件_第3页
图形用户界面ppt课件_第4页
图形用户界面ppt课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、图形用户界面图形用户界面事件驱动编程事件驱动编程2 2GUI编程编程 首先首先:设计界面外观设计界面外观 用什么构件用什么构件,怎样规划怎样规划 其次其次:实现界面元素所对应的程序功能实现界面元素所对应的程序功能 事件驱动事件驱动:功能代码的执行与构件关联功能代码的执行与构件关联,由由针对构件的事件决议执行什么代码以及针对构件的事件决议执行什么代码以及何时执行何时执行.3 3Tkinter事件描画事件描画 事件描画事件描画 类型符类型符:指定事件类型指定事件类型,如如Button和和Key 修饰符修饰符(可选可选):描画双击描画双击,组合键等组合键等 细节符细节符(可选可选):指定详细鼠标或键

2、盘按键指定详细鼠标或键盘按键 例如例如 4 4常用鼠标事件常用鼠标事件 或或或或:单单击左键击左键 类似有类似有和和 :按下左键并挪动按下左键并挪动 类似有类似有和和 :双击左键双击左键 和和:鼠标指针进入鼠标指针进入/分开分开构件区域构件区域5 5常用键盘事件常用键盘事件 或或a:按下字母按下字母a 可打印字符都类似可打印字符都类似,但空格是但空格是,小于号是小于号是 留意留意:1和和不同不同! :按下回车键按下回车键 非可打印字符都类似非可打印字符都类似,如如:, , , , , 等等 :按下恣意键按下恣意键 :同时按下同时按下Shift和和键键 类似的有类似的有Alt组合、组合、Ctrl

3、组合组合 6 6事件对象事件对象 每个事件都创建一个事件对象每个事件都创建一个事件对象(Event类的实例类的实例),并将该对象传送给事件处置函数并将该对象传送给事件处置函数 事件对象具有假设干描画事件的属性事件对象具有假设干描画事件的属性: x和和y:鼠标点击位置鼠标点击位置(相对于构件左上角相对于构件左上角) x_root和和y_root:鼠标点击位置鼠标点击位置(相对于屏幕左上相对于屏幕左上角角) num:点击的鼠标键号点击的鼠标键号(1、2、3) char:按下的字符按下的字符(ASCII);假设按下特殊键那么假设按下特殊键那么为空串为空串 keysym:按下的字符按下的字符(ASCI

4、I);假设按下特殊键假设按下特殊键那么为该键的称号那么为该键的称号(是个字符串是个字符串) 7 7 7事件处置事件处置 GUI运用程序在建立图形界面等初始化运用程序在建立图形界面等初始化任务后进入事件循环任务后进入事件循环,等待事件发生并触等待事件发生并触发绑定的事件处置程序发绑定的事件处置程序 mainloop()方法方法:进入事件循环进入事件循环 绑定绑定:建立事件与事件处置程序间的对应建立事件与事件处置程序间的对应8 8 8构件绑定事件构件绑定事件 语法语法: .bind(,) 语义语义:假设针对假设针对发生了与发生了与相匹配的事件相匹配的事件,那么调用那么调用 调用事件处置程序时调用事

5、件处置程序时,系统传送系统传送Event对象作为对象作为实参实参. 普通是由用户自定义的函数普通是由用户自定义的函数. 这种函数在运用程序中定义但不由运用程序调这种函数在运用程序中定义但不由运用程序调用用,而是由系统调用而是由系统调用,普通称为回调普通称为回调(callback)函函数数 GUI运用程序可封装为类运用程序可封装为类,这时事件处置程序常这时事件处置程序常定义为运用程序类的方法定义为运用程序类的方法. (详后详后)9 9 9例例:框架绑定鼠标事件框架绑定鼠标事件 eg8_6.py from Tkinter import * def callback(event): print cl

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

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

8、 event.x, event.y root = Tk() f = Frame(root,width=100,height=100) f.bind(,callback1) f.bind(,callback2) f.pack() root.mainloop()121212运用程序作为对象运用程序作为对象 GUI编程经常将整个运用程序封装成类编程经常将整个运用程序封装成类. 在类中建立图形界面在类中建立图形界面,定义事件处置方法定义事件处置方法. 益处益处 事件处置函数是类的方法事件处置函数是类的方法, 自然可以访问自然可以访问类中一切实例变量类中一切实例变量 只需将构件存储为实例变量只需将构件存

9、储为实例变量,就能实现处就能实现处置代码与图形界面的置代码与图形界面的“无缝集成无缝集成. 例例:程序类独立创建根窗口程序类独立创建根窗口class MyApp: def _init_(self): root = Tk() b = Button(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)

10、root.mainloop() 14例例:myapp.pyclass MyApp: def _init_(self): self.root = Tk() self.t = Label(self.root,text=Spam) self.t.pack() 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(

11、self): if self.ttext = Spam: self.ttext = Egg else: self.ttext = Spamapp = MyApp()15161616模型模型-视图视图 复杂程序常可分解成中心逻辑和用户界复杂程序常可分解成中心逻辑和用户界面两个部分面两个部分 模型模型:为运用问题建模为运用问题建模,管理运用问题的数管理运用问题的数据和行为据和行为,对来自对来自UI的数据恳求或数据更的数据恳求或数据更新指令进展呼应新指令进展呼应 视图视图:担任显示模型的当前数据形状担任显示模型的当前数据形状,响运响运用户的交互动作用户的交互动作 模型和视图相互独立模型和视图相互独立

12、,可以分开设计和测可以分开设计和测试试171717模型模型-视图方法的优点视图方法的优点 由于模型与视图的相对独立性由于模型与视图的相对独立性,可以为一可以为一个模型配用不同的视图个模型配用不同的视图,以到达不同的目以到达不同的目的的. 后例中后例中,先设计一个基于文本界面的简单先设计一个基于文本界面的简单视图来测试模型的正确性视图来测试模型的正确性,然后再设计更然后再设计更美观易用的美观易用的GUI视图视图编程案例编程案例:汇率换算器汇率换算器 模型模型:存储当前汇率存储当前汇率,进展外币与人民币之进展外币与人民币之间的换算间的换算 类类CCApp: ccapp.py 复杂程序也许需求多个类来实现模型复杂程序也许需求多个类来实现模型 留意留意_init_的参数的参数inter:代表程序的界代表程序的界面面(尚未设计尚未设计)18基于文本的用户界面基于文本的用户界面 先实现一个简单界面先实现一个简单界面,以测试模型能否能以测试模型能否能正确任务正确任务. 类类TextInterfac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论