应我家领导要求编word文档处理脚本时,恰逢即将迎来领导生日,就想着在脚本上来点花头,看到知乎网友编写的turtle画爱心脚本(sorry翻了半天找不到链接了),实测发现画出来有点不够对称,因此,对脚本进行了修改(确保了爱心完全对称)。博领导开心一笑足矣,脚本拿走不写~
按惯例本来首先要介绍下turtle模块,考虑到学不学模块无所谓,最重要的是领导开心,先对脚本中影响你家领导的关键位置点出来。
- 设置图像窗口的标题,改成你家的风格吧,不要让领导觉得是借来的程序
turtle.title('领导专用程序')
- 写上要对领导说的表白(rou ma)话儿,一个命令是一行字,字太多就把字号改小点
lv.write("喵领导",font=(u"方正舒体",36,"normal"),align="center")
lv.write("生日快乐!",font=(u"方正舒体",48,"normal"),align="center")
lv.write("点我点我快点我",font=(u"华文琥珀",26,"bold"),align="right")
- 光画个心就可以了吗,领导有这么好搞定吗!礼物该送送,烛光晚餐该请请。比如礼物,可以把礼物的页面连接到"点我点我快点我"上,打开页面的功能通过main()函数实现(webbrowser模块很简单的),具体怎么搞不知道就问度娘
def main():
pass
上源代码:
#! usr/bin/eny python
import turtle
import datetime
#生日快乐
def love():
def func(x, y):
main()
turtle.title('领导专用程序')
lv=turtle.Turtle()
lv.hideturtle()
lv.getscreen().bgcolor('light blue')
lv.color('yellow','red')
lv.pensize(1)
lv.speed(1)
lv.up()
lv.goto(0,-150)
#开始画爱心
lv.down()
lv.begin_fill()
lv.goto(0, -150)
lv.goto(-175.12, -8.59)
lv.left(140)
pos = []
for i in range(19):
lv.right(10)
lv.forward(20)
pos.append((-lv.pos()[0], lv.pos()[1]))
for item in pos[::-1]:
lv.goto(item)
lv.goto(175.12, -8.59)
lv.goto(0, -150)
lv.left(50)
lv.end_fill()
#写字
lv.up()
lv.goto(0, 80)
lv.down()
lv.write("喵领导",font=(u"方正舒体",36,"normal"),align="center")
lv.up()
lv.goto(0, 0)
lv.down()
lv.write("生日快乐!",font=(u"方正舒体",48,"normal"),align="center")
lv.up()
lv.goto(100, -210)
lv.down()
lv.write("点我点我快点我",font=(u"华文琥珀",26,"bold"),align="right")
lv.up()
lv.goto(160, -190)
lv.resizemode('user')
lv.shapesize(4, 4, 10)#调整小乌龟大小,以便覆盖“点我”文字
lv.color('red', 'red')
lv.onclick(func)
lv.showturtle()
def main():
pass
if __name__ == '__main__':
if datetime.date.today() == datetime.date(YYYY, MM, DD): #YYYY年,MM月,DD日
love()
else:
main()
模块还是要介绍下,就放最后吧,真(mei)爱(you)学(dui)习(xiang)的学习控们,继续往下看。
turtle是python的一个非常初级的绘图模块(功能可能还不如windows自带画图?),基本就是通过“小乌龟”(光标箭头)在窗口中移动,绘制出曲线,同时配以填充颜色,生成可视化效果。
- 绘图窗口
lv = turtle.Turtle() #生成绘图窗口lv
turtle.Title('领导专用程序') #设置绘图窗口标题为《领导专用程序》
lv.getscreen().bgcolor('red') #设置绘图窗口lv的背景色
- 光标位置(小乌龟)
lv.hideturtle() #小乌龟隐藏不显示
lv.showturtle() #显示小乌龟
lv.position() #返回小乌龟当前所在的坐标
lv.heading() #返回小乌龟脑袋朝向
lv.left(90) #小乌龟脑袋左转90度
lv.right(90) #小乌龟脑袋右转90度
- 画线(移动)
lv.color('yellow','red') #设置画线的颜色(前者)、填充的颜色(后者)
lv.up() #小乌龟飞起来,这之后的小乌龟只移动不画线
lv.down() #小乌龟地上爬,这之后的小乌龟边移动边画线
lv.goto(0,-150) #小乌龟沿直线移动(或画线)到绝对坐标(0,-150)
lv.forward(100) #小乌龟向前(脑袋方向)爬100距离(或画线)
lv.backward(100) #小乌龟倒车(背对脑袋)100距离(或画线)
lv.circle(100, extent=None, steps=None) #小乌龟以其左侧(脑袋方向逆时针转90度)100距离处的点为圆心,画圆(或移动)。如果画弧线,则extent给定弧线的角度。如果画多边形,则steps给定整圆几条边
lv.write("喵领导",font=(u"方正舒体",36,"normal"),align="center") #写字。font为字体设置(字体,字号,类型)。align为对齐方式
- 填充
lv.begin_fill() #开始填充,之后小乌龟移动时,不仅画线,而且填充
lv.end_fill() #结束填充,直到这个时候前面小乌龟移动画线的填充效果才会显示出来
- 鼠标操作(链接)
lv.onclick(func, btn=1) #鼠标点击则调用函数func。func一定要定义为两参数函数func(x,y),x、y分别为鼠标点击位置的坐标值。btn表示鼠标点击类型(1就是左键)
lv.onrelease(func, btn=1) #鼠标点击释放则调用函数func
lv.ondrag(func, btn=1) #鼠标摁住拖动则调用函数func
#鼠标点击的是小乌龟,所以要将小乌龟调整到方便点击的大小
lv.resizemode('user') #小乌龟大小设置为允许用户自定义
lv.shapesize(stretch_wid=4, stretch_len=4, outline=10)#调整小乌龟大小。stretch_wid、stretch_len表示小乌龟整体宽度、长度的缩放系数。outline为小乌龟轮廓线的宽度
- 动画效果
lv.speed(1) #设置脚本运行时,图形绘制的速度。速度1~10表示逐渐增加的速度。速度0表示没有乌龟爬行过程(绘制过程)动画,直接显示结果图形