程序设计思想与方法python-陆朝俊-38569-00Ch5_第1页
程序设计思想与方法python-陆朝俊-38569-00Ch5_第2页
程序设计思想与方法python-陆朝俊-38569-00Ch5_第3页
程序设计思想与方法python-陆朝俊-38569-00Ch5_第4页
程序设计思想与方法python-陆朝俊-38569-00Ch5_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

图形编程,LuChaojun,SJTU,2,LuChaojun,SJTU,2,2,有图有真相,应用程序经常要用到图形/图像/动画统计软件证券分析软件教学软件可视化:将抽象事物和过程转变成视觉可见的、形象直观的图形图像表示柱状图,直方图,散点图,网络图,流程图,树,地图,图像,动画,.,LuChaojun,SJTU,3,LuChaojun,SJTU,3,3,计算可视化,科学可视化:将科学与工程计算、实验中的数据用直观的计算机图形图像呈现出来,以便人们理解数据、增强对事物现象的认识和对内在规律的洞察.数据可视化:将海量数据转化为数据图像,以帮助人们直观地观察数据.可以进而发展到更高层次的信息可视化和知识可视化.工程设计可视化.,LuChaojun,SJTU,4,LuChaojun,SJTU,4,4,图形是复杂数据,包含的信息是复杂的圆形:圆心(元组)和半径(数值);内部及边界的颜色(RGB元组);.图形操作是复杂的求面积,周长等传统计算;还有移动位置,改颜色等等,LuChaojun,SJTU,5,LuChaojun,SJTU,5,5,数据与操作:两种观点,数据与操作分离编程时先考虑数据的表示然后再考虑对数据如何操作数据与操作一体编程时考虑的数据不是单纯的数据,而是结合了相应操作的数据.这种数据就是对象.,LuChaojun,SJTU,6,LuChaojun,SJTU,6,对象,对象:集数据与操作于一身.对象知道一些信息对象能对那些信息进行处理计算:向对象发出请求操作的消息.面向对象:软件系统由各种对象组成,对象之间通过消息进行交互.图形编程工具通常都是面向对象实现的.如Python标准模块Tkinter,LuChaojun,SJTU,LuChaojun,SJTU,7,LuChaojun,SJTU,7,7,几个基本概念,类:描述同类对象的共性.包含的数据能执行的操作(称为方法)对象:是类的实例.创建对象:使用类的构造器.(,)消息:请求对象执行它的方法.(,),LuChaojun,SJTU,8,LuChaojun,SJTU,8,8,Tkinter图形编程(1),导入模块importTkinter或fromTkinterimport*创建根窗口:作图窗口root=Tk(),LuChaojun,SJTU,9,LuChaojun,SJTU,9,9,Tkinter图形编程(2),创建画布c=Canvas(,=,.)Canvas是画布类,利用它可以创建画布对象.在中创建画布=用来设置画布对象的数据,如高度,宽度,背景色等例如:在root中创建300 x200的白色画布c=Canvas(root,width=300,height=200,bg=white),LuChaojun,SJTU,10,LuChaojun,SJTU,10,10,Tkinter图形编程(3),布置画布已经创建了画布c,但在窗口中看不见,因为还需要将画布布置到窗口中.c.pack()点表示法传统观点下,用一个操作(函数)f()去处理数据x的表示法为f(x)面向对象观点下,希望对象o执行操作f()的表示法为o.f()c.pack()表示请画布c执行pack布局操作,LuChaojun,SJTU,11,LuChaojun,SJTU,11,11,Tkinter图形编程(4),画布上的坐标系坐标单位是像素;也可用厘米,英寸等.c.pack()表示请画布c执行pack布局操作,LuChaojun,SJTU,12,LuChaojun,SJTU,12,12,Tkinter图形编程(5),画布上的图形都有标识号,用于区分同一画布上的多个图形也可以为图形命名(标签),画布对象的方法(1),删除画布上的图形c.delete(id)id是画布上图形的标识号移动画布上的图形c.move(id,dx,dy)id是图形标识号,dx和dy是轴向移动距离设置画布上图形的选项c.itemconfig(id,=.),LuChaojun,SJTU,13,画布对象的方法(2),画矩形c.create_rectangle(x0,y0,x1,y1,.)或r=c.create_rectangle(.)返回所画矩形的标识号常用选项outline=颜色fill=颜色state=NORMAL/HIDDENdash=(线段长,间隔),LuChaojun,SJTU,14,例:画矩形,c.create_rectangle(50,50,200,100)1r2=c.create_rectangle(80,70,240,150,tags=rect#2)printr22c.itemconfig(1,fill=black)c.itemconfig(r2,fil1=grey,outline=white,width=6)c.delete(r2)c.move(1,50,50)c.create_rectangle(50,50,51,51)#Tkinter画点p1=(10,10)p2=(50,80)c.create_rectangle(p1,p2,tags=#3)xy=(100,110,200,220)c.create_rectangle(xy),LuChaojun,SJTU,15,画布对象的方法(3),画椭圆c.create_oval(x0,y0,x1,y1,.)返回所画椭圆的标识号常用选项outline=颜色fill=颜色state=NORMAL/HIDDENdash=(线段长,间隔),LuChaojun,SJTU,16,例:画椭圆,o1=c.create_oval(50,50,250,150)o2=c.create_oval(110,85,140,115,fill=red)o3=c.create_oval(245,95,255,105,fill=blue),LuChaojun,SJTU,17,画布对象的方法(4),画弧形c.create_arc(x0,y0,x1,y1,.)返回所画弧形的标识号常用选项start=开始位置(角度)extent=逆时针旋转的角度style=PIESLICE/ARC/CHORDoutline,fill,state,dash等,LuChaojun,SJTU,18,例:画弧形,bbox=(50,50,250,150)c.create_arc(bbox)c.create_arc(bbox,start=100,extent=140,style=arc,width=4)c.create_arc(bbox,start=250,extent=110,style=chord),LuChaojun,SJTU,19,画布对象的方法(5),画线条c.create_line(x0,y0,.xn,yn,.)返回所画线条的标识号常用选项smooth=0:折线/非0:平滑曲线arrow=NONE/FIRST/LAST/BOTHarrowshape=(d1,d2,d3)fill,state,dash等,LuChaojun,SJTU,20,例:画线条,s1=(20,20)s2=(60,40)s3=(80,60)s4=(85,80)s5=(70,100)s6=(85,115)s7=(110,100)polaris=(220,40)c.create_oval(s1,(23,23),fill=black)c.create_oval(s2,(63,43),fill=black).c.create_oval(s7,(113,103),fill=black)c.create_oval(222,36),(226,42),fill=black)c.create_line(s1,s2,s3,s4,s5,s6,s7,s4)c.create_line(s7,polaris,dash=(4,),arrow=LAST)c.create_line(5,190,150,160,295,190,smooth=1),LuChaojun,SJTU,21,画布对象的方法(6),画多边形c.create_polyfon(x0,y0,.xn,yn,.)返回所画多边形的标识号常用选项smooth=0:折线/非0:平滑曲线outline(缺省值为空)fill(缺省值为黑色)state,dash等,LuChaojun,SJTU,22,例:画弧形,p11,p21,p31=(70,20),(70+100,20),(70,20+100)p12,p22,p32=(35,50),(35+100,50),(35,50+100)p13,p23,p33=(55,85),(55+100,85),(55,85+100)p14,p24,p34=(85,85),(85+100,85),(85,85+100)p15,p25,p35=(105,50),(105+100,50),(105,50+100)c.create_polygon(p11,p12,p13,p14,p15)c.create_polygon(p21,p23,p25,p22,p24,outline=black,fill=)c.create_polygon(p31,p32,p33,p34,p35,outline=black,fill=),LuChaojun,SJTU,23,画布对象的方法(7),创建文本c.create_text(x,y,.)返回所创建文本的标识号常用选项text=文本内容anchor=E/S/W/N/CENTER/SE/NE/.justify=LEFT/CENTER/RIGHTfill,state,dash等,LuChaojun,SJTU,24,例:创建文本,t1=c.create_text(10,10,text=NW(10,10),anchor=NW)c.create_text(150,10,text=N(150,10),anchor=N)c.create_text(290,10,text=NE(290,10),anchor=NE)c.create_text(10,100,text=W(10,100),anchor=W)c.create_text(150,100,text=CENTER(150,100)n2ndLine),LuChaojun,SJTU,25,画布对象的方法(8),创建图像先创建图像对象img=PhotoImage(file=)在画布上显示图像对象c.create_image(x,y,image=img,.)返回所创建图像的标识号常用选项anchor=E/S/W/N/CENTER/SE/NE/.state,tags等,LuChaojun,SJTU,26,例:创建图像,pic=PhotoImage(file=C:WINDOWSWebexclam.gif)c.create_image(150,100,image=pic),LuChaojun,SJTU,27,事件编程,defcanvasFunc(event):ifc.itemcget(t,text)=Hello!:c.itemconfig(t,text=Goodbye!)else:c.itemconfig(t,text=Hello!)deftextFunc(event):ifc.itemcget(t,fill)!=white:c.itemconfig(t,fill=white)else:c.itemconfig(t,fill=black).t=c.create_text(150,100,text=Hello!)c.bind(,canvasFunc)#画布与左键绑定c.tag_bind(t,textFunc)#画布上文本与右键绑定root.mainloop(),LuChaojun,SJTU,28,编程案例:统计图表(1),程序规格输入:考试分数输出:以饼图表示的各分数段所占比例算法输入分数mark,换算成a,b,c,d,f等级并累加该等级的人数;创建窗口和画布;计算各等级的比例(a/n等),并据此确定扇形起止角度(sA,eA等);绘制各扇形;绘制图例;为各扇形绑定“鼠标进入”事件,并定义事件处理函数(inPieA()等);进入主事件循环。,LuChaojun,SJTU,29,编程案例:统计图表(2),代码实现:piechart.py,LuChaojun,SJTU,30,动画编程,动画:运动的图形.现实中运动是连续的.计算机动画运动离散化:t,t+t,t+2t,t+3t,.快速交替显示一组静止图形,或者让一幅图形快速移动.关键是控制交替显示或移动的速度:24帧/秒,LuChaojun,SJTU,31,编程实例:演示天体运动(1),地球在椭圆轨道上运动的计算:画布坐标系中:,LuChaojun,SJTU,32,编程实例:演示天体运动(2),月球一方面随地球绕太阳运动,一方面还绕地球运动.分别计算两种运动导致的坐标变化,然后求和.,LuChaojun,SJTU,33,编程实例:演示天体运动(3),算法创建窗口和画布;在画布上绘制太阳、地球和月球,以及地球的绕日椭圆轨道;设置地球和月球的当前位置;进入动画循环:旋转0.01计算地球和月球的新位置移动地球和月球到新位置更新地球和月球的当前位置;停顿一会程序:animation.py,LuChao

温馨提示

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

评论

0/150

提交评论