pythoncamp0

[week 2]Painting

任务

唯一作业:

可回放的点彩画板

要求:

基础: 有画笔,可点绘

可用: 有画笔,有颜色,可点绘

合格: 有画笔,有颜色,可点绘,可回放

天才: 有画笔,有颜色,可点绘,可回放,回放速度可调节,回放可输出为文件

我的目标:

尽可能实现最多的功能。

方法:

  1. 逐步实现,而非一口气所有任务都上马。(单线程而非多线程)
  2. 蝈蝈超快速完成任务之后参考了她的教程
  3. 参考docs,而非有不懂的地方只会看video

基础任务:

先在脑海中想象了一下最后成品的界面是怎么样的。有三个按钮(对应三种图形),右边是最后绘图的界面。

  1. 构建框架:

frame.set_mouseclick_handler(click) frame.set_draw_handler(draw)

添加按钮: frame.add_button("Circle", circle)

  1. 看每个按钮都需要什么函数来实现功能——点击时改变相应的形状的存储值。

  2. 解决主体——点绘

def click()——将点击到的坐标给这个图形 def draw_handler—— canvas.draw_circle/polygon

和第二步的关系就是,绘图函数的第一个参数用变量代替,代入按钮选定的值。

有颜色:

需要颜色可以自己选定,我认为做成按钮很限制,所以选择做成输入框。

需要的改变:

原来的draw部分最后一个参数的颜色是选定的,现在需要把这个地方改成一个变量,输入框部分构造一个函数把颜色赋值。 frame.add_input

color_input.set_text('red')可以设置默认值的指令

出现的巨大问题:

只按上面的步骤做,如果修改一下颜色,或者更换一个形状,那么所有的图形都会更改自己的图形和颜色。

问题是:我的设置中没有给每个图形分类存储信息,每个图形的信息都是一样的,是同一赋值的。

解决方法:更好的使用列表

每个图形分别存储自己的信息,包括图案,颜色,坐标。

if order <=1024: 
    lst.append([position, input_color, model])

在click函数,接受了坐标之后添加的处理。同时解决了计次(1024)的问题。

可回放

  1. 构想如何实现。回放自己的绘图过程,就是这个程序自动画图,他可以自己往最后draw函数使用的列表里面添加相应的图形。

    • 需要一个list,存储了所有图案的信息,在回放的时候可以按时间往绘图函数需要的列表投放。
    • 这个list在我们绘制图案的时候已经把图案的信息存储了
    • 需要timer
  2. 实现:

    • 先解决第二个步骤的,在click函数最后添加一步,使得review的list和这个 list相同。

    • 然后解决第一步的。需要使用遍历和条件语句的结合,判断现在在review—list里面的序号是否在我们规定的范围内,以此为依据向列表投放图案。

    这一段做了很多遍。变量多,不要彼此写反了;还有遍历和条件语句的顺序不要弄反

  • 第三个就是按照常规设施计时器。最后回放按钮启动的是计时器。

可调速

设置input框,和自动输入颜色的设置是一样的。

对可输出的思考

  • google了一下发现,常规的write语句是本地才能用的。
  • 我想到codeskulpter可以在线编辑的代码保存,于是我去查看了人家网页的源代码,发现里面有javascript,经同学指点我们的codeskulpter是只能运行python的。原本以为可以先把要输出的部分print出来,然后参考这种下载方式下载。

所以现在想到的,还是要把本地环境搭建好,然后进行输出。