《最新图形用户界面精品课件.ppt》由会员分享,可在线阅读,更多相关《最新图形用户界面精品课件.ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2 2GUI编程编程 首先首先:设计界面外观设计界面外观 用什么构件用什么构件,怎么布局怎么布局 其次其次:实现界面元素所对应的程序功能实现界面元素所对应的程序功能 事件驱动事件驱动:功能代码的执行与构件关联功能代码的执行与构件关联,由针由针对构件的事件决定执行什么代码以及何时执对构件的事件决定执行什么代码以及何时执行行.9 9 9例例:框架绑定鼠标事件框架绑定鼠标事件 eg8_6.pyfrom Tkinter import *def callback(event): print clicked at,event.x,event.yroot = Tk()f = Frame(root,width
2、=100,height=100)f.bind(,callback)f.pack()root.mainloop()101010例例:按钮绑定键盘事件按钮绑定键盘事件 按键时按键时,界面中哪个构件响应该键盘事件界面中哪个构件响应该键盘事件? 占有界面占有界面焦点焦点的构件的构件.例例eg8_7.py:from Tkinter import *def printInfo(event): print pressed, event.charroot = Tk()b = Button(root,text = Press any key) b.bind(,printInfo) b.focus_set() b
3、.pack() root.mainloop()111111例例:绑定多个事件绑定多个事件 按键时按键时,界面中哪个构件响应该键盘事件界面中哪个构件响应该键盘事件? 占有界面占有界面焦点焦点的构件的构件.例例eg8_7.py:from Tkinter import *def callback1(event): print pressed, event.chardef callback2(event): f.focus_set() print clicked at, event.x, event.yroot = Tk()f = Frame(root,width=100,height=100)f.b
4、ind(,callback1)f.bind(,callback2)f.pack()root.mainloop()121212应用程序作为对象应用程序作为对象 GUI编程经常将整个应用程序封装成类编程经常将整个应用程序封装成类. 在类中建立图形界面在类中建立图形界面,定义事件处理方法定义事件处理方法. 好处好处事件处理函数是类的方法事件处理函数是类的方法, 自然可以访问类中所自然可以访问类中所有实例变量有实例变量只要将构件存储为实例变量只要将构件存储为实例变量,就能实现处理代码就能实现处理代码与图形界面的与图形界面的“无缝集成无缝集成”. 例例:程序类独立创建根窗口程序类独立创建根窗口class
5、 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)root.mainloop() 14例例:myapp.pyclass MyApp: def _init_(self): self.root = Tk
6、() 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(self): if self.ttext = Spam: self.ttext = Egg else: self.ttext = Spamapp =
7、 MyApp()15161616模型模型-视图视图 复杂程序常可分解成核心逻辑和用户界复杂程序常可分解成核心逻辑和用户界面两个部分面两个部分 模型模型:为应用问题建模为应用问题建模,管理应用问题的数据管理应用问题的数据和行为和行为,对来自对来自UI的数据请求或数据更新指的数据请求或数据更新指令进行响应令进行响应 视图视图:负责显示模型的当前数据状态负责显示模型的当前数据状态,响应用响应用户的交互动作户的交互动作 模型和视图相互独立模型和视图相互独立,可以分开设计和测试可以分开设计和测试171717模型模型-视图方法的优点视图方法的优点 由于模型与视图的相对独立性由于模型与视图的相对独立性,可以
8、为一可以为一个模型配用不同的视图个模型配用不同的视图,以达到不同的目以达到不同的目的的. 后例中后例中,先设计一个基于文本界面的简单视先设计一个基于文本界面的简单视图来测试模型的正确性图来测试模型的正确性,然后再设计更美观然后再设计更美观易用的易用的GUI视图视图编程案例编程案例:汇率换算器汇率换算器 模型模型:存储当前汇率存储当前汇率,进行外币与人民币之进行外币与人民币之间的换算间的换算 类类CCApp: ccapp.py 复杂程序也许需要多个类来实现模型复杂程序也许需要多个类来实现模型 注意注意_init_的参数的参数inter:代表程序的界面代表程序的界面(尚尚未设计未设计)18基于文本的用户界面基于文本的用户界面 先实现一个简单界面先实现一个简单界面,以测试模型是否能以测试模型是否能正确工作正确工作. 类类TextInterface: ti.py 测试测试CCApp和和TextInterface是否能配合是否能配合完成预定功能完成预定功能. testti.py19GUI 经测试模型没有问题经测试模型没有问题,即可实现复杂的即可实现复杂的GUI. 类类GUInterface: gui.py 测试测试CCApp和和GUInterface是否能配合完是否能配合完成预定功能成预定功能. testgui.py202121End22 结束语结束语