彩点画板程序代码的链接在此.
该第二个作业并不像第一个作业那么容易应付了,上周的程序编写只需要从头到尾的单一线性思路便可解决,而这次必须考虑的要素多了起来。
在交互程序中,用户的输入是多样化的。用户虽然输入但是键盘上那些有限的符号(先不考虑图片视频和其它更高级的信息),但程序要求的合法输入范围往往更为具体,这就要求在编程规划中考虑对每一个文本输入框的输入进行合法性检查。
在上周要求的是用户输入的必须为符合要求的数字,这很容易解决。可这周在让用户自定义彩笔颜色这一环节则有些难度。颜色的RGB码有多少?不知道。网上一查后发现可不少,是不是要把这些一一写在代码里,然后看输入的颜色名称和RGB码是不是包括在里面?应该不是,如此一来应该是要借助专门的类库吧。网上初查无果,于是这个先暂且放下。
上面说的文本输入框是一个事件启动器,当它被触发式就执行对应函数操作。当一个事件启动时,我们总希望它瞬间被完成,这在很多情况中也确实如此。但是,当某一个事件的执行需要一定时间的情况下,我们必须考虑其它事件的突然触发。例如,在要求回放的按键被点击后,回放事件开始,此时用户如果在画布上点击会怎么样、用户如果突然调整回放速度又会怎么样等等。
一旦向用户开放的交互事件窗口越来越多,多线性事件多交互问题就越来越复杂,虽然每一个事件本身是线性执行的,但多个事件同时或隔开很多时间而相继触发时我们要防止出现各种bug。
在作业中,我们想要调整画笔形状与颜色时都可以直接把一个有效值赋予相应的全部变量。这种做法却无法调整timer的时间间隔参数,interval值。这个问题一时之间不知道怎么解决,后来看了其他同学的做法,是用timer.is_running()和timer.stop()停止正在运行的timer,然后重新申明timer。这就有问题了,为什么timer要重新申明呢?
具体例子:
import simplegui
interval=1000
def tick():
print 1
timer = simplegui.create_timer(interval, tick)
timer.start()
timer.stop()
interval=10000
timer.start()
你会发现以上程序运行后,timer的输出1的时间间隔仍然是1000。
如果添加一句申明:
import simplegui
interval=1000
def tick():
print 1
timer = simplegui.create_timer(interval, tick)
timer.start()
timer.stop()
interval=10000
timer = simplegui.create_timer(interval, tick)
timer.start()
结果其间隔就变成10000了。
但是,一定要这样吗?为什么?
作业要求回放可输出为文件。这个我又不知道怎么处理。输出文本文件是很简单的事(起码所有教科书上都有标准做法),但到底是文本文件吗?不知道,所以先放下。