DIY画图程序

windows10画图

windows xp画图

引言

相信很多小朋友都喜欢画画,学校信息技术课也有教大家使用画图进行简单的数字作品创作,所以对于画图这款软件都是不陌生的,之前我们是用画图软件来画画,今天我们学习如何用Python turtle来DIY一款画图软件,当然我们DIY的画图软件的雏形。

程序简介

我们先来观察一下美图秀秀和windows10自带绘图软件的绘图功能。

美图秀秀

可以看到,美图休息的画图功能,我们在左下方选择不同的颜色,然后就可以在画布上画出不同颜色的线条,当我们选择形状的时候,还可以通过颜色切换按钮,来切换不同形状的填充颜色。

windows10画图软件

我们来看windows10自带的画图软件,我单击颜色1,也就是前景色按钮,我们用画笔在涂鸦的时候,可以看到,我选择的颜色不同,绘制的线条的颜色也不同;当我单击颜色2,并选择不同的颜色的时候,我绘制椭圆的时候,椭圆边框的颜色和填充的颜色都是在发生变化的。
今天我们就来实现这样的功能,不过,在动手写程序之前,我们需要认真的思考,把程序的思路搞清楚,我们把编写程序这个任务,分解成不同的部分,然后分别实现,最后就可以编写出画图程序了。

画笔颜色和填充色

在编写程序之前,我们要了解画笔颜色和填充颜色的区别,我们之前学习了用color方法来设置小乌龟的画笔颜色和填充色,我们说,一个形状轮廓的颜色对应的是画笔的颜色,而填充色就是内部的颜色。大家如果理解了就打1.

程序思路

我们之前学习过游戏设计,说一个游戏分成了游戏元素,游戏规则,目标和趣味性等部分,那么我今天要编写的是应用程序,也可以从几个不同的部分来看,比如程序界面,程序的交互方式,下面我们分别来看

程序界面

我们看画图的界面,有画笔颜色和填充颜色切换按钮:


切换

还有就是颜色选择按钮



当我们单击了画笔颜色按钮也就是图中的颜色1,我们单击颜色切换按钮的时候,切换的就是前景色的按钮;如果单击了颜色2按钮,也就是背景色按钮,单击颜色按钮就会切换背景色的颜色

绘图区

再就是绘图区,我们在绘图区单击按钮,就会根据我们选择的前景色和背景色来绘制原型。

交互方式

大家看老师的原型程序,只涉及到了鼠标的操作,这样的程序我们在第二次直播制作红包和小乌龟程序都涉及到了,我们可以通过使用onscreenclick来让小乌龟响应鼠标单击

背景色切换

可以看到当我们单击背景色切换的时候,虽然没有什么变化,但是当我们再次单击颜色按钮的时候,画笔或者背景色颜色按钮会发生响应的变化,这个是由小乌龟绘制的,而且要注意前景色按钮绘制的时候前景色和填充都是你选择的前景色的颜色;而选择背景色按钮的时候,背景色按钮的画笔和填充色都是我们选择的颜色。
需要注意的是,画笔颜色和背景色按钮是个单独的小乌龟,而在绘图区绘制图形的又是另外一个小乌龟toolTurtle,在单击按钮的时候对于小乌龟的颜色的设置是不同的。
所以,我们要处理两只小乌龟的状态

标志变量

那么程序如何判断我们现在要改变的是前景色还是背景色呢?就是通过filled变量,如果单击的是画笔颜色按钮,我们就让filled是False,如果单击了填充色按钮,我们就把filled的值改成True

绘制图形

在绘图区绘制图形的时候,我们也要根据这个标志变量filled来绘制带填充或者不带填充的图形。


判断单击了哪个按钮

如何判断单击了哪个按钮呢?我们最初在颜色混淆这个游戏里学习了通过判断x坐标来判断到底单击的是左侧按钮还是右侧按钮,后来我们又学习了制作猜数字游戏,通过x,y坐标来判断单击了哪个按钮,想必同学们对于这个已经非常熟悉了。




大家可以回顾下这两节用到的知识。

程序实现

接下来我们来实现程序,一般情况下,程序的界面是要自己绘制的,但是这次为了节省时间,我们直接把windows10的画图截图,然后作为我们程序的背景图片,注意Python turtle的背景图片只能是gif或者png图片,然后根据单击的位置来判断按钮。首先我们导入turtle模块

加载背景

turtle.bgpic('ht.png')

新建filled变量,并且默认值设置为false

处理鼠标单击事件

接下来我们来编写响应鼠标事件的按钮

def onMouse(x, y):
    pass
turtle.onscreenclick(onMouse)

在函数内部,根据单击坐标的不同,分别判断:

  • 是否是画笔颜色按钮
    • 修改filled
  • 是否是背景色按钮
    • 修改filled
  • 是否颜色按钮
    • 根据filled的值改变turtle的颜色
    • 改变toolTurtle的前景色背景色的值
    • 改变用来实际绘图的turtle的前景色背景色
  • 是否绘图区
    • 是否填充
      • 是填充,绘制填充图形
      • 不是填充,绘制不带填充的图形

注意所有按钮的判断都是通过坐标实现的,同时运用了and等逻辑运算,自定义了函数

我们写代码实现。我们改变了颜色之后,就要绘图了。

绘图

当我们单击颜色按钮的时候,我们先来实现背景色和画笔颜色的变化,我们其实不太知道,坐标是什么,但是我们可以通过打印onMouse函数的坐标,从而实现查看每个按钮对应的坐标。
我们在单击前景色按钮之后,也就是filled为false的情况下,我们要做的事情有,根据单击的颜色,要改变用来绘制工具栏按钮的小乌龟的前景色和背景色,来绘制按钮,然后在改变绘图区turtle的前景色,这样小乌龟就可以在绘图区画图了

你可能感兴趣的:(DIY画图程序)