第9章 图形绘制(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)

2024-08-10
| 49页
| 35人阅读
| 2人下载
普通

内容正文:

第9章 图形绘制 Tkinter概述 画布绘图 图形的事件处理 图形绘制应用举例 9.1 Tkinter概述 Tkinter是Python语言的标准GUI库,常被用于快速开发小型图形界面应用程序。 9.1.2 使用Tkinter创建GUI程序的步骤 (1)导入Tkinter模块。 import tkinter(导入tkinter模块) import tkinter as tk (导入tkinter模块为tk) from tkinter import *(导入tkinter的所有内容) (2)建立主窗口。 root = tkinter.Tk() (5)绑定事件处理程序响应用户操作(如单击按钮)引发的 事件。 (6)进入事件循环,等待用户触发事件响应。 root.mainiloop() (3)在主窗口中添加控件,如文本框、按钮等。 (4)调用控件的pack()、grid()、place()方法,通过几何布局管理器调整并显示其位置和大小。 9.1.3 Tkinter的主窗口 Tkinter的主窗口也被称为根窗体,是图形化应用程序的根容器,是Tkinter模块底层控件的实例。 在导入Tkinter模块后,我们可以调用Tk()方法来初始化一个根窗体实例。 window = Tk() 例 9-1 最简单的GUI程序示例。 (1) 在Python程序中导入Tkinter模块。 (2) 创建窗体对象。 (3) 启动消息循环。 from tkinter import * frm_main = Tk() frm_main.mainloop() 2. 装饰界面 属性 说明 举例 title(str) 窗口标题,str表示参数类型为字符串 title(‘数据分析’〕 iconbitmap(str) 窗口左上角程序图标 iconbitmap(".\\pic\\SUN.ICO") geometry(‘宽x高距左右边距上下边’) 窗体的几何尺寸及在屏幕中的位置,其中x不能少,距左边用+右边用-,距上边用+下边用- geometry(‘800x500+100+50’) resizable(b,b) 窗体尺寸的可变性,b表示逻辑型 resizable(0,0)(高宽都不可变) 9.1.4 画布对象的创建 画布(canvas)是用来绘制图形的区域,所有tkinter模块中的图形操作都是在画布上完成的。 (1)创建一个画布对象 画布对象名 = Canvas(窗口对象名, 属性名=属性值,...) 画布对象的常用属性:高度(height)、宽度(width)、背景色(bg或background)等。 c=Canvas(w,width=300,height=200,bg='white') (2) 显示画布对象 c.pack() (3) 可对画布的属性进行设置 c['bg']='green' 9.1.5 画布中的图形对象 各种图形对象的共性操作 1. 图形对象的标识:采用标识号和标签(tag) 标识号是在创建图形对象时自动为其赋予的唯一整数编号。 为图形对象指定标签的三种方法: (1)在创建图形时,利用tags属性来指定标签。 (2)创建图形之后,可以利用画布的itemconfig()方法对tags属性进行设置。 (3)利用画布的addtag_withtag()方法来为图形对象添加新标签。 例如: >>> id1=c.create_rectangle(10,10,100,50,tags="No1") >>> id2=c.create_rectangle(20,30,200,100,tags=("myRect","No2")) >>> c.itemconfig(id1,tags=("myRect","Rect1")) >>> c.addtag_withtag("ourRect","Rect1") 注意:一个图形对象可以与多个标签相关联,同样一个标签可以与多个图形对象相关联。 2. 图形对象的共性操作 (1) gettags()方法:用于获取给定图形对象的所有标签。 (2) find_withtag()方法:用于获取与给定标签相关联的所有图形对象。 (3) delete()方法:用于从画布上删除指定的图形对象。 (4) move()方法:用于在画布上移动指定图形。 >>> print(c.gettags(id1)) ('myRect', 'Rect1', 'ourRect') >>> print(c.find_withtag("Rect1")) >>> c.delete(id1) >>> c.move(id2,10,20) 9.2 画布绘图 9.2.1 绘制矩形 方法:create_rectangle() 格式:r=画布对象名.create_rectangle(x0,y0,x1,y1,属性设置……) 其中,(x0,y0)是矩形左上角的坐标,(x1,y1)是矩形右下角的坐标。属性设置即对矩形的属性进行设置。r保存图形的标识号。 >>>r=c.create_rectangle(80,70,250,180,tags="Rect2") 2.矩形对象的常用属性 (1) 矩形边框属性 outline属性:通过outline属性可以设置矩形的边框颜色,默认值为黑色。 width属性:通过width属性可以设置边框的宽度,默认值为1像素。 dash属性:通过dash属性可以绘制边框成虚线形式,该属性的值是整数元组。例如二元组(a,b),其中a表示要画多少个像素,b表示要跳过多少个像素。 (2) 矩形内部填充属性 fill属性:通过fill属性可以设置矩形内部区域的填充颜色,默认值为空字符串,即透明的效果。 stipple属性:在填充颜色时,可以使用stipple属性设置填充画刷,即填充的点刻效果,可以取gray12、gray25、gray50、gray75等值。 state属性:该属性用于设置图形的显示状态,默认值为NORMAL或normal,即正常显示。 9.2.2 绘制椭圆与圆弧 1.绘制椭圆 画布对象名.create_oval(x0,y0,x1,y1,属性设置……) 例 9-3 绘制如图所示的圆和椭圆 from tkinter import * w=Tk() w.title('绘制圆和椭圆') c=Canvas(w,width=260,height=260,bg='white') c.pack() c.create_oval(30,30,230,230,fill='black',width=2) c.create_oval(30,80,230,180,fill='green',width=2) c.create_oval(80,30,180,230,fill='white',width=2) 13 2.绘制圆弧 canvas.create_arc(x0, y0, x1, y1, 属性设置...) 属性start:定义弧形的开始位置,其值为一个角度(x轴方向为0º)。默认值为0º。 属性extent:定义弧形的结束位置,其值表示从开始位置逆时针旋转的角度。默认值为90º。 属性style用于规定圆弧的样式,可以取三种值: PIESLICE:扇形,即圆弧两端与圆心相连,默认值; ARC:弧,即圆周上的一段; CHORD:弓形,即弧加连接弧两端的弦。 14 from tkinter import * w=Tk() c=Canvas(w,width=350,height=200,bg="white") c.pack() c.create_arc(20,40,100,120,width=2) #默认样式是PIESLICE c.create_arc(120,40,200,120,style=CHORD,width=2) c.create_arc(220,40,300,120,style=ARC,width=2) 例子: 9.2.3 显示文本 画布对象名.create_text(x, y, 属性设置...) (x,y)指定文本显示的参考位置 text属性:设置文本内容,其值即为要显示的字符串。 anchor属性:用于指定文本的哪个锚点与显示位置(x,y)对齐。锚点可通过E(东)、S(南)、W(西)、N(北)、CENTER(中)、SE(东南)、SW(西南)、NW(西北)、NE(东北)等方位常量表示 fill属性用于设置文本的颜色,默认值为黑色。 justify属性用于控制多行文本的对齐方式,其值可以是LEFT、CENTER或RIGHT,默认为LEFT。 font属性指定文本字体。 例 9-4 画布文本显示示例。 from tkinter import * w=Tk() w.title('文本显示') c=Canvas(w,width=400,height=200,bg="white") c.pack() c.create_rectangle(200,100,201,101,width=8) c.create_text(200,100,text="Hello Python1",\ font=("宋体",15,"normal"),anchor=SE) c.create_text(200,100,text="Hello Python2",\ font=("宋体",15,"normal"),anchor=SW) c.create_text(200,100,text="Hello Python3",\ font=("宋体",15,"normal"),anchor=NE) c.create_text(200,100,text="Hello Python4",\ font=("宋体",15,"normal"),anchor=NW) 9.3 图形的事件处理 “事件”(event)指在程序执行过程中发生的操作。 例如单击鼠标左键、按下键盘上的某个键等。 某个对象可以与特定事件绑定在一起,这样当特定事件发生时,可以调用特定的函数来处理该事件。 1. 事件绑定 使用画布对象的bind()方法或者tag_bind()方法。 例如: c.bind("<Button-1>",canvasF) 将画布对象与鼠标左键单击事件<Button-1>进行了绑定。 c.tag_bind(t,"<Enter>",textF1) 将画布上的文本对象t与鼠标指针进入事件<Enter>进行了绑定。 2.事件处理函数 对象与特定事件进行绑定时,需告诉系统当对象发生了指定的事件后该如何处理的函数。 例如: canvasF()函数用于处理画布上的鼠标左键单击事件。 功能是改变文本t的内容,如果当前内容是"Python!"就变成"Programming!",如果当前是"Programming!"就变成"Python!"。 3.主窗口事件循环 语句:w.mainloop() 作用:进入主窗口的事件循环。系统会自动监控在主窗口上发生的各种事件,并触发相应的处理函数。 turtle(海龟)库是turtle绘图体系的Python实现 turtle绘图体系:1969年诞生,主要用于程序设计入门 Python语言的标准库之一 入门级的图形绘制函数库 9.4 turtle绘图 turtle的原理 turtle(海龟)是一种真实的存在 有一只海龟,其实在窗体正中心,在画布上游走 走过的轨迹形成了绘制的图形 海龟由程序控制,可以变换颜色、改变宽度等 turtle.setup()函数 格式:turtle.setup(width,height,startx,starty) 作用:设置主窗体的大小和位置。 width:窗口宽度 height:窗口高度 startx:窗口左侧与屏幕左侧的像素距离 starty:窗口顶部与屏幕顶部的像素距离 >>>turtle.setup(650, 350,200,200) turtle的魅力 #PythonDraw.py import turtle turtle.setup(650, 350, 200, 200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40) for i in range(4): turtle.circle(40, 80) turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done() 1.导入turtle模块 使用turtle绘图,首先需要导入turtle模块,有以下两种方法。 >>> import turtle >>> from turtle import * import turtle 函数调用时使用的语句格式是turtle.circle(10) from turtle import * 函数调用时使用的语句格式是 circle(10) import turtle as t 函数调用时使用的语句格式是 t.circle(10) 01 02 03 2.turtle绘图属性   turtle绘图有三个要素,分别是位置、方向和画笔。 (1)位置是指箭头在Turtle 图形窗口中的位置。 (2)方向是指箭头的指向,使用left(degree)、right(degree)函数使得箭头分别向左、向右旋转degree度。 (3)画笔是指绘制的线条的颜色和宽度。 9.4.2 画笔控制函数 1. turtle.penup() 作用:抬起画笔,之后移动画笔不绘制形状。 2. turtle.pendown()函数 作用:落下画笔,之后移动画笔将绘制形状。 3. turtle.pensize(width)函数 作用:设置画笔宽度,当无参数输入时返回当前画笔宽度。 turtle.pensize(25) 4. turtle.pencolor(colorstring)函数或turtle.pencolor((r,g,b)) 作用:设置画笔颜色,当无参数输入时返回当前画笔颜色。 6. turtle. color(color1,color2)函数 作用:同时设置pencolor=color1,fillcolor=color1 5. turtle. fillcolor(colorstring)函数 作用:设置绘制图形的填充颜色 7. turtle. begin_fill( )函数 8. turtle. end_fill( )函数 作用:准备开始填充图形 作用:填充完成 9.4.3 形状绘制函数 1. turtle.fd(distance)函数或turtle.forward(distance) 作用:向小海龟当前行进方向前进 distance 距离;distance为负数时表示向相反方向前进。 >>>turtle.fd(40) 2. backward(d):与forward()函数相反,控制箭头向后移动,其中d代表移动的距离。 forward(d) backward(d) 3. goto(x,y):将箭头从当前位置径直移动到坐标为(x,y)的位置,移动后方向也不改变。如果想要移动箭头到(x,y)处理,但不要绘制图形,可以使用up()函数。 例如,下列命令绘制一根水平直线。 from turtle import * reset() #将整个绘图窗口清空并将箭头置于原点(窗口的中心) goto(100,0) #当前位置(0,0)运动到(100,0)位置 import turtle turtle.goto( 100, 100) turtle.goto( 100,-100) turtle.goto(-100,-100) turtle.goto(-100, 100) turtle.goto(0,0) 绝对角度 4. turtle.seth(to_angle)函数或turtle.setheading(to_angle) 作用:设置小海龟当前行进方向为 to_angle,该角度是绝对方向角度值。只改变方向但不行进。 >>> turtle.seth(-40) turtle角度坐标体系 turtle.seth(45) turtle.seth(-135) 5. turtle.left(angle)函数 作用:顺时针移动angle度。该角度为相对角度。只改变方向不移动。 6. turtle.right(angle)函数 作用:逆时针移动angle度。该角度为相对角度。只改变方向不移动。 Turtle角度坐标体系 import turtle turtle.left(45) turtle.fd(150) turtle.right(135) turtle.fd(300) turtle.left(135) turtle.fd(150) 7. turtle.circle(radius,extent=None)函数 作用:根据半径 radius 绘制 extent 角度的弧形。 radius:弧形半径,当值为正数时,半径在小海龟左侧, 当值为负数时,半径在小海龟右侧。 extent:绘制弧形的角度,当不设置参数或参数设置为 None 时,绘制整个圆形。 turtle.circle(100) turtle.circle(-100,90) 例12-2 绘制三个同心圆。 程序如下: from turtle import * for i in range(3): up() #提起画笔 goto(0,-50-i*50) #确定画圆的起点 down() #放下画笔 circle(50+i*50) #画圆 1、下列哪个选项能够使用turtle库绘制一个半圆形?( ) A.turtle.fd(100) B.turtle.circle(100) C.turtle.circle(100, 90) D.turtle.circle(-100, 180) 2.turtle库中控制颜色的函数是( )。 A.pensize () B.pendown() C.goto() D.pencolor() D D 3、 下列程序运行后,得到的图形是( )。 from turtle import * goto(100,100) A.水平直线 B.垂直直线 C.斜线 D.只移动坐标不做图 4、 turtle库中控制顺时针转的函数是( )。 A.pendown() B.left() C.right() D.pencolor() C C 例12-1 绘制一个正方形。 程序如下: from turtle import * color("blue") #定义绘制时画笔的颜色 pensize(5) #定义绘制时画笔的线条宽度 speed(10) #定义绘图的速度 for i in range(4): #绘出正方形的四条边 forward(100) right(90) 使用turtle库,绘制一个正方形。请完成以下程序。 import turtle as t t.pensize(3) for i in range(4): t.fd(100) _______ t.left(90) 使用turtle库,绘制一个叠边形,其中,叠边形内角为100度。请完成以下程序。 import turtle as t t.pensize(2) for i in range(9): t.fd(180) _______ t.right(80) 使用turtle库,绘制一个六边形。请完成以下程序。 import turtle as t t.pensize(3) for ______ _ _: t.fd(100) t.left(60) i in range(6) 使用turtle库,绘制一个边长为40像素的十二边形。请完成以下程序。 import turtle turtle.pensize(2) d = 0 for ______ : turtle.fd(40) d += 30 turtle.seth(d) i in range(12) 例 使用turtle库,绘制一个六瓣花。 程序如下: from turtle import * x = 50 for i in range(6): circle(x,240) left(60) 例12-5 使用turtle库绘制红色五角形。 程序如下: from turtle import * pencolor("red") goto(-100, 50) pendown() color("red") begin_fill() for i in range(5): forward(200) right(144) end_fill() hideturtle() done() 例 绘制太阳花,其中画笔颜色为红色,填充颜色为黄色。 程序如下: import turtle turtle.color("red","yellow") turtle.begin_fill() for i in range(50): turtle.forward(200) turtle.right(170) turtle.end_fill() turtle.done() 9.5 图形绘制应用举例 实例一:Python蟒蛇绘制 import turtle turtle.setup(650, 350, 200, 200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40) for i in range(4): turtle.circle(40,80) turtle.circle(-40,80) turtle.circle(40,80/2) turtle.fd(40) turtle.circle(16,180) turtle.fd(40*2/3) 实例二:科赫曲线绘制 import turtle def koch(size, n): if n==0: turtle.fd(size) else: for angle in [0, 60, -120, 60]: turtle.left(angle) koch(size/3, n-1) def main(): turtle.setup(600,600) turtle.speed(0) turtle.penup() turtle.goto(-200,-100) turtle.pendown() turtle.pensize(2) level = 5 koch(400,level) turtle.right(120) koch(400, level) turtle.right(120) koch(400, level) turtle.hideturtle() main() turtle.done() $$

资源预览图

第9章  图形绘制(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
1
第9章  图形绘制(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
2
第9章  图形绘制(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
3
第9章  图形绘制(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
4
第9章  图形绘制(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
5
第9章  图形绘制(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。