Python赤橙黄绿青蓝紫(落笔抬笔打点)教学演示幻灯片.pyw
用Python制作的幻灯片类型的作品,用来教Python画一个简单漂亮的图形
我们把它叫做赤橙黄绿青蓝紫(落笔抬笔打点),以下是完整源代码。
本程序需要sprites模块支持,安装方法为在命令提示符下输入以下命令安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites --upgrade
1 """ 2 第十课 赤橙黄绿青蓝紫(落笔抬笔打点) 3 """ 4 from sprites import * 5 6 s = '第十课 赤橙黄绿青蓝紫(落笔抬笔打点)' 7 screen = Screen() 8 screen.bgcolor('blue') 9 screen.titlebar(False) 10 root = screen._root # 窗口对象 11 root.wm_attributes('-alpha',0.7) # 设置窗口为全透明(0到1.0) 12 screen.setup(800,800) 13 screen.tracer(0,0) 14 15 # 下面的代码让窗口可以拖动. 16 oldx = 0 17 oldy = 0 18 def startmove(event): 19 global oldx,oldy 20 oldx = event.x 21 oldy = event.y 22 def stopmove(event): 23 global oldx,oldy 24 oldx = 0 25 oldy = 0 26 def movewindow(event): 27 global oldx,oldy 28 dx = event.x - oldx 29 dy = event.y - oldy 30 root.move(dx,dy) 31 screen.cv.bind("<ButtonPress-2>", startmove) 32 screen.cv.bind("<ButtonRelease-2>", stopmove) 33 screen.cv.bind("<B2-Motion>",movewindow) 34 35 # 下面的代码按方向箭头则窗口能上下左右移动 36 screen.onkeypress(lambda:root.move(10),'Right') 37 screen.onkeypress(lambda:root.move(-10),'Left') 38 screen.onkeypress(lambda:root.move(0,-10),'Up') 39 screen.onkeypress(lambda:root.move(0,10),'Down') 40 screen.listen() 41 42 ft_title = ('楷体',30,'bold') 43 ft_context = ('宋体',18,'normal') 44 t = Sprite(visible=False,pos=(-500,100)) 45 t.color('magenta') 46 clock = Clock() 47 for x in range(100): 48 t.clear() 49 t.write(s,align='center',font=ft_title) 50 t.wait() 51 t.fd(5) 52 clock.tick(60) 53 54 spacekey = Key('space') # 空格键 55 m1 = Mouse() # 鼠标左键 56 while not spacekey.down():screen.update() 57 58 # 简介 59 brief =""" 60 本节课,我们主要学习倒退命令、抬笔与落笔和打点命令。 61 然后运用所学过的知识用程序的顺序结构画一个简单的彩色图形。 62 在这个课程中,我们把画的步骤描述了一下,大家在观看视频的时候 63 可以暂停一下,看看能不能自己先画出来。 64 """ 65 if brief!='': # 如果有课程简介,则生成一个角色, 66 ftx = ('宋体',18,'normal') 67 简介 = Sprite(visible=False,pos=(0,-100)) 68 简介.color('white') 69 简介.write(brief,align='center',font=ftx) 70 while spacekey.down():screen.update() 71 while not spacekey.down():screen.update() 72 73 for x in range(66): # 标题向右消失 74 t.clear() 75 t.write(s,align='center',font=ft_title) 76 t.fd(10) 77 if brief!='': 78 简介.clear() 79 简介.write(brief,align='center',font=ftx) 80 简介.bk(10) 81 clock.tick(60) 82 简介.clear() 83 84 #以下是显示学习的内容段 85 studycontent = """ 86 主要学习内容 87 88 1、关于参数 89 90 2、倒退命令 91 92 3、落笔与抬笔 93 94 4、dot打圆点命令 95 96 5、编程画图形 97 98 6、练习与作业 99 """ 100 t.color('white') 101 t.clear() 102 t.sety(-260) # 这里修改菜单的显示y坐标 103 ft = ('楷体',24,'bold') 104 s = studycontent 105 while not spacekey.down():screen.update() 106 # 下面的代码显示主菜单 107 for x in range(130): 108 t.clear() 109 t.write(s,align='center',font=ft) 110 t.bk(5) 111 clock.tick(60) 112 113 def slow_write(t,string): 114 """ 115 t:角色,string:要显示的字 116 本函数慢慢的显示字。 117 """ 118 string = string.split('\n') # 换成列表 119 oldxy = t.position() # 记录老的坐标 120 t.goto(-360,330) # 定位到标题的坐标 121 # 显示标题,注意string[0]是一个空行 122 t.write(string[1],font=ft_title) 123 t.addy(-50) 124 for line in string[2:]: # 每一行字 125 for char in line: # 每一个字符 126 t.write(char,align='center',font=ft_context) 127 t.wait(0.1) 128 cd = len(bytes(char,'gb2312')) 129 if cd == 1: 130 t.addx(16) 131 else: 132 t.addx(24) 133 t.setx(-360) 134 t.addy(-30) 135 t.goto(oldxy) 136 137 s1 = """ 138 1、关于参数 139 140 所谓参数,它可能是一个数据,也可能是一个变量, 141 关于参数我们以后还会讲解。在这里把它理解为写 142 到命令小括号中的数据。如turtle.fd(100), 143 那么100就是参数。而在print(32,76)这句代码中, 144 print命令有两个参数,它们以逗号进行隔开。 145 146 """ 147 def press1(): 148 t.clear() 149 slow_write(t,s1) 150 while not spacekey.down():screen.update() 151 t.clear() 152 t.write(s,align='center',font=ft) 153 screen.onkeypress(press1,'1') 154 155 156 s2 = """ 157 2、倒退命令 158 159 如果要让海龟倒退的话,我们可以在forward命令中用负数。 160 当然,也可以直接用海龟画图提供的backward、back和bk命令。 161 它们都是能让海龟往后退。 162 如turtle.backward(100)就能让海龟倒退100个单位了。 163 当然,我们写成turtle.back(100)或者turtle.bk(10) 164 都是完全没有问题的。 165 166 """ 167 def press2(): 168 t.clear() 169 slow_write(t,s2) 170 while not spacekey.down():screen.update() 171 t.clear() 172 t.write(s,align='center',font=ft) 173 screen.onkeypress(press2,'2') 174 175 176 s3 = """ 177 3、落笔与抬笔 178 179 海龟默认就是落笔的,当我们移动它时,它就会留下轨迹。 180 如果不希望它留下轨迹,那么我们可以用抬笔命令让它抬笔。 181 pendown,pd,down这三个是落笔命令,没有参数。 182 penup,pu,up这三个是抬笔命令,没有参数。 183 isdown命令判断是否是落笔还是抬笔状态。 184 """ 185 def press3(): 186 t.clear() 187 slow_write(t,s3) 188 while not spacekey.down():screen.update() 189 t.clear() 190 t.write(s,align='center',font=ft) 191 screen.onkeypress(press3,'3') 192 193 194 s4 = """ 195 4、dot命令 196 197 dot命令能打圆点,它有两个参数,第一个表示直径,第二个表示颜色。 198 如果不写颜色,则以海龟的颜色为圆点的颜色。 199 假设海龟的颜色为红色,那么dot(100)会打一个直径为100的红圆。 200 dot(100,'blue')则不管海龟什么颜色,海龟都会在屏幕上 201 会打一个直径为100的蓝色的圆。 202 """ 203 def press4(): 204 t.clear() 205 slow_write(t,s4) 206 while not spacekey.down():screen.update() 207 t.clear() 208 t.write(s,align='center',font=ft) 209 screen.onkeypress(press4,'4') 210 211 212 s5 = """ 213 5、编程画图形 214 215 现在来练习编程,让海龟从屏幕的左边到右边打不同颜色的圆点。 216 颜色依次是赤、橙、黄、绿、青、蓝、紫。 217 由于黑色的背景能更加衬托出彩色的效果,所以当导入海龟模块后, 218 我们获取了屏幕,把它命名为screen,然后把屏幕的背景色设为黑色。 219 接着,为了让海龟在移动的过程中不留下轨迹,所以让它抬笔了。 220 我们希望海龟从左边到右边打圆点,所以让海龟倒退了300个单位。 221 最后,我们不断地打一个不同颜色的圆点,然后前进100个单位, 222 一共打了7个点。 223 224 """ 225 def press5(): 226 t.clear() 227 slow_write(t,s5) 228 while not spacekey.down():screen.update() 229 t.clear() 230 t.write(s,align='center',font=ft) 231 screen.onkeypress(press5,'5') 232 233 s6 = """ 234 6、练习与作业 235 236 ★ 画两条并排的竖线条,长度为100,隔50个单位 237 238 ★ 打两行甚至更多行的赤橙黄绿青蓝紫圆点图形。 239 240 ★ 打点时只写直径这个参数,重新编制赤橙黄绿青蓝紫图形。 241 242 """ 243 def press6(): 244 t.clear() 245 slow_write(t,s6) 246 while not spacekey.down():screen.update() 247 t.clear() 248 t.write(s,align='center',font=ft) 249 screen.onkeypress(press6,'6') 250 251 252 253 byebye = """ 254 下次再见! 255 """ 256 def pressq(): 257 t.clear() 258 t.color('cyan') 259 t.home() 260 t.write(byebye,align='center',font=('宋体',38,'bold')) 261 while not spacekey.down():screen.update() 262 screen.bye() 263 screen.onkeypress(pressq,'q') 264 265 266 screen.mainloop()