python元组与错误提示演示幻灯片.pyw_python无标题栏窗口_python半透明窗口

 

用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,700)
 13 
 14 # 下面的代码让窗口可以拖动.
 15 oldx = 0
 16 oldy = 0
 17 def startmove(event):
 18     global oldx,oldy
 19     oldx = event.x
 20     oldy = event.y
 21 def stopmove(event):
 22     global oldx,oldy
 23     oldx = 0
 24     oldy = 0        
 25 def movewindow(event):
 26     global oldx,oldy     
 27     dx = event.x - oldx
 28     dy = event.y - oldy
 29     root.move(dx,dy)
 30 screen.cv.bind("<ButtonPress-2>", startmove)
 31 screen.cv.bind("<ButtonRelease-2>", stopmove)
 32 screen.cv.bind("<B2-Motion>",movewindow)
 33 
 34 # 下面的代码按方向箭头则窗口能上下左右移动
 35 screen.onkeypress(lambda:root.move(10),'Right')
 36 screen.onkeypress(lambda:root.move(-10),'Left')
 37 screen.onkeypress(lambda:root.move(0,-10),'Up')
 38 screen.onkeypress(lambda:root.move(0,10),'Down')
 39 screen.listen()
 40 
 41 ft = ('楷体',38,'bold')
 42 t = Sprite(visible=False,pos=(-500,0))
 43 t.color('magenta')
 44 clock = Clock()
 45 for x in range(110):
 46     t.clear()
 47     t.write(s,align='center',font=ft)
 48     t.wait()
 49     t.fd(5)
 50     clock.tick(60)
 51 
 52 m1 = Mouse()          # 鼠标左键
 53 while not m1.down():screen.update()
 54 
 55 for x in range(50):
 56     t.clear()
 57     t.write(s,align='center',font=ft)
 58     t.wait()
 59     t.fd(10)
 60     clock.tick(60)
 61     
 62 #以下是显示学习的内容段
 63 studycontent = """
 64 主要学习内容
 65 
 66 1、元组的概念
 67 
 68 2、元组的索引
 69 
 70 3、语法错误
 71 
 72 4、名字错误
 73 
 74 5、类型错误
 75 
 76 6、索引错误
 77 
 78 7、练习与作业
 79 """
 80 t.color('white')
 81 t.clear()
 82 t.sety(-260)              # 这里修改菜单的显示y坐标
 83 ft = ('楷体',24,'bold')
 84 s = studycontent
 85 while not m1.down():screen.update()
 86 #  下面的代码显示主菜单
 87 for x in range(110):
 88     t.clear()
 89     t.write(s,align='center',font=ft)
 90     t.wait()
 91     t.bk(5)
 92     clock.tick(60)
 93 
 94 def slow_write(t,string):
 95     """
 96        t:角色,string:要显示的字
 97        本函数慢慢的显示字。
 98     """
 99     string = string.split('\n') # 换成列表     
100     oldxy = t.position()   # 记录老的坐标
101     t.goto(-340,310)       # 到新的坐标
102     for line in string:    # 每一行字
103         for char in line:     # 每一个字符
104             t.write(char,align='center',font=ft)
105             t.wait(0.2)
106             cd = len(bytes(char,'gb2312'))
107             if cd == 1:
108                 t.addx(20)
109             else:
110                 t.addx(30)
111         t.setx(-336)
112         t.addy(-50)
113     t.goto(oldxy)
114      
115 s1 = """
116 1、元组的概念
117 
118 元组是以小括号封闭的,以逗号隔开的,有顺序的,
119 不可变的数据集合。英文名为tuple。
120 它是一种固定的组合,一旦元组中的数据确定了,
121 那么我们就不能往里面添加,删除与修改数据。
122 定义一个空元组可以直接输入(),也可以用tuple命令,
123 如xy=tuple()会返回一个名为xy的空元组。
124 新建一个只有一个数据的元组,要在这个数据后面加逗号。
125 如,(3,)是一个只有一个数据的元组。
126 type查看元组的结果为<class 'tuple'>
127 """
128 def press1():
129     t.clear()
130     slow_write(t,s1)
131     while not m1.down():screen.update()
132     t.clear()
133     t.write(s,align='center',font=ft)    
134 screen.onkeypress(press1,'1')
135 
136 
137 s2 = """
138 2、元组的索引
139 
140 元组和列表一样,要访问元组中的每个数据
141 也是通过索引号进行的。
142 假设有一个元组叫cors=(32,76),那么我们可
143 以通过cors[0]访问它的第一个数据,
144 通过cors[-1]访问它的最后一个数据,
145 但是不能给它们赋值。
146 如果试图修改cors[0]的值,那么就会显示类型错误。
147 即cors[0]=77这样的式子是会出错的。
148 """
149 def press2():
150     t.clear()
151     slow_write(t,s2)
152     while not m1.down():screen.update()
153     t.clear()
154     t.write(s,align='center',font=ft)    
155 screen.onkeypress(press2,'2')
156 
157 
158 s3 = """
159 3、语法错误
160 
161 当我们输入代码的时候,不小心可能会出现了语法方面
162 的错误。Python就会显示语法错误。
163 如输入print(32),那么就会出错语法错误。它的英文
164 提示字符串为:
165 SyntaxError: invalid character in identifier
166 这个错误是由于前半部分小括号输入错误,应该输入
167 半角小括号。
168 """
169 def press3():
170     t.clear()
171     slow_write(t,s3)
172     while not m1.down():screen.update()
173     t.clear()
174     t.write(s,align='center',font=ft)    
175 screen.onkeypress(press3,'3')
176 
177 
178 s4 = """
179 4、名字错误
180 
181 当我们使用了一个没有定义的‘变量’时,就会出现
182 这个错误。假设并没有叫x的变量,当用print打印它
183 时就会显示以下的字符。
184 NameError: name 'x' is not defined
185 意思是名字错误:名字'x'没有被定义。
186 """
187 def press4():
188     t.clear()
189     slow_write(t,s4)
190     while not m1.down():screen.update()
191     t.clear()
192     t.write(s,align='center',font=ft)    
193 screen.onkeypress(press4,'4')
194 
195 
196 s5 = """
197 5、类型错误
198 
199 当某种数据不支持某种操作时,就会出现类型错误。
200 典型的如,元组不支持修改数据。
201 那么试图修改它里面的数据的时候就会现出类型错误。
202 假设有一个元组叫colors,它的值如下所示:
203 ('red','bule','cyan'),
204 那么输入colors[1]='black'就会显示类型错误。
205 英文为:
206 TypeError: 'tuple' object does not
207 support item assignment
208 上面的意思是类型错误:‘元组’对象不支持项目赋值。   
209 """
210 def press5():
211     t.clear()
212     slow_write(t,s5)
213     while not m1.down():screen.update()
214     t.clear()
215     t.write(s,align='center',font=ft)    
216 screen.onkeypress(press5,'5')
217 
218 s6 = """
219 6、索引错误
220 
221 当使用超出范围的索引号时,就会出现这个错误。
222 假设有颜色表为:
223 colors=['red','bule','cyan'],由于colors列表
224 最大的索引号为2,那么打印colors[5]的时候就会
225 出现索引错误。它的英文提示为:
226 IndexError: list index out of range
227 意思就是索引错误:列表索引超出范围。
228 """
229 def press6():
230     t.clear()
231     slow_write(t,s6)
232     while not m1.down():screen.update()
233     t.clear()
234     t.write(s,align='center',font=ft)    
235 screen.onkeypress(press6,'6')
236 
237 s7 = """
238 7、练习与作业
239 
240 ① 说出列表和元组的区别。
241 ② ('abcd')这个数据是什么类型?
242 ③ 把总结的四种类型提示里的英文单词放在一个元组中。
243 ④ tuple命令不仅能新建空元组,也能在它的小括号里
244 加上字符串或列表。尝试下面的用法:
245 tuple('风火轮编程')和
246 tuple([32,76,8])。
247 说说tuple这个时候起了什么作用?
248 """
249 def press7():
250     t.clear()
251     slow_write(t,s7)
252     while not m1.down():screen.update()
253     t.clear()
254     t.write(s,align='center',font=ft)    
255 screen.onkeypress(press7,'7')
256 
257  
258 
259 byebye = """
260 下次再见!
261 """
262 def pressq():
263     t.clear()
264     t.color('cyan')
265     t.home()
266     t.write(byebye,align='center',font=('宋体',38,'bold'))
267     while not m1.down():screen.update()
268     screen.bye()    
269 screen.onkeypress(pressq,'q')
270 
271 
272 screen.mainloop()

 

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