前几篇,我们使用Python中tkinter库制作了一个简易的画图板程序,实现了圆、椭圆、矩形、直线等图形的绘制功能。但是,绘图效果没有想象中好看,我们只是拖动鼠标实现了绘图功能,对于鼠标当前位置及我们要绘制的图形的样子是什么?我们没法实时掌握,如果能在绘制时用虚线展示我们绘制图形的样子,是不是看起来就高大上了?下面,我们来具体实现一下。
先看下效果吧
拖动鼠标时显示绘图轨迹
释放鼠标后画出图形
绘制图形时显示鼠标绘制的轨迹,鼠标释放后,结束显示并画出我们需要的图形。
分 析
要想实现这个功能,起始,想想很简单,就是在鼠标移动的时候画出想要绘制的图形,并将之前绘制的图形擦除掉即可,但是问题来了,如果每次都绘制然后显示,刷新画板,我们的内容跟刷新率是跟不上的。有没有好一点的解决办法呢?当然有了,在类的属性中我们定义一个self.temp_gui,并且将其设置为None,这就是Python的强大之处了,temp_gui用来存储我们之前绘制的图形类。实现这个功能的步骤如下:
鼠标移动时判断起始点是否符合绘图要求(坐标大于零)如果满足要求则判断self.temp_gui是否为空如果self.temp_gui不为空则清除如果self.temp_gui为空则开始绘制虚线图代码演示
不赘述,主要代码如下所示。
鼠标移动时绘制图形轨迹
行83-行86用于判断是否符合绘图要求,行87开始判断各种图形的绘图开关是否打开,如果打开,随着鼠标的移动会绘制响应的图形虚线轨迹。
鼠标释放后清除轨迹并绘制图形
这里以绘制直线和矩形为例,行126-行128用于判断绘图轨迹是否为空,如果不为空则清除它们。
最后,我们在类初始化代码中绑定这两个事件即可。代码如下。
self.canvas.bind('', self.endHandler)self.canvas.bind('', self.curHandler)
总 结
我们再来回顾下这个过程,这次我们绘制矩形看下。
画矩形时显示矩形绘制轨迹
释放鼠标后画出矩形
这是个酷酷的操作,感兴趣的朋友们可以自己敲代码试试,本文只是对主要代码进行了演示,想要源代码的下方留言索取。虽然实现了这些功能,但是我们绘制的图形如果能拖动,就更酷了,感兴趣的朋友们持续关注哦!
转载请注明出处(百家号:Python高手养成)