创建模版(inport)
可以在 Docs 中找到自己要用的模版,如本题中要用到:
inport simplehui
inport match
创建框架等(frame/timer)
创建一个可以鼠标点击的画板框架:
frame = simplegui.create_frame("Mouse selection", width, height)
创建一个用于回放的计时器:
timer = simplegui.create_timer(interval, timer_handler)
注册事件(frame.set/frame.add)
注册画板(canvas)、按钮(button)、鼠标点击(mouseclick )、画图(draw)等事件。
举例:
frame.set_canvas_background("White") ——注册一个背景为白色的画板
frame.add_button("红色\n",click_red,100) ——注册一个写着红色的按钮,宽度为100
按照上面的例子,完成注册,在写代码的过程中发现要用什么,可以再回头补齐,一些基本用法,求助 Docs。
定义全局变量(global)
定义所有要用到的全局变量,可以在用到时回头补足。
调用事件(def)
定义注册的每一个事件触发后做什么,暂时不写的,用 pass 忽略此事件。
创建辅助函数
开始(start Frame&Timer)
这个可以一开始创建框架和计时器时就写好:
frame.start()
timer.start()——在这个程序中计时器有一点特殊,它不能在一开始就触发,而要在点击回放时调用,所以timer.start()写在调用点击回放按钮的事件中。
可回放,但加速减速有问题,结果都是越来越快。
加入了if timer.is_running():
timer.stop() 语句(在dos里面查找想要的语法)现在只剩回放输出文件的问题。
修改
在回放时点击画布不能再添加图案,以免回放被打乱。
[问题1] 全局变量
要注意全局变量的设置
在这个题目中,一个图案有三个参数(位置,形状,颜色)—— 形状和颜色要设为全局变量。
位置是一个列表,其特性和全局变量一样,不需要另外设置。
但位置这个参数本身鼠标点击画板后获取的pos(x,y)。这涉及到第一个问题的第二个方面——参数:
[问题1] 参数
* 想在点击某个按钮触发该事件时计时器才启动,start.timer()写在触发它的事件里,而不要写在全局。
[问题3] timer 的 interval 变量问题
蝈蝈回答,timer在运行时不能改变它的变量interval
在 Docs 中找到了 timer.is_running 和 timer.stop() 语句。
引申类比:不能在for...in...遍历(迭代)时改变/删除列表中的元素。
可视化分析
点击运行后,就可以用上图的四个黄框按钮逐步检查运行情况。