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()

 

posted on 2020-05-11 11:37  李兴球  阅读(598)  评论(0编辑  收藏  举报