多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Python Turtle绘图:海龟写古诗《元日》(需要了解一点书法常识)【难度2星】 **我以为写古诗很简单呢,平时练钢笔字时不也经常写呢吗,没想到就一个落款就有很多讲究呢!突然意识到我平时练的只是“字”,而不是“书法”~~** **案例:写古诗《元日》** 难度:★★☆☆☆☆  【效果预览】 ![](http://h.yiniuedu.com/d7449b55d8c294bbd8a22163bd0103d7)  【配色参考】 **“从喜欢的图片中找寻配色灵感**” ![](http://h.yiniuedu.com/8f4d79bff4235c2cf306ebe5a2df5166) ![](http://h.yiniuedu.com/a5fb1a78e481b7180c8f6cec344f898e)  【重难点突破】 **1. 这个“宋王安石元日”为什么放在后面的落款处呢?** 以传统竖式行文格式来写古诗词,题目通常写在落款处。可以单行,长款可以分多行,短款也可以在正文后接着写,字号稍小一点,和正文要有区别。 落款字应比正文略小;落款上部比正文略低,下部要高于正文;篆、隶书落款用楷、行、草书;楷书落款用行、草书;行书落款用草、行书;盖印后不低于正文。 ******2. 这个印章是怎么做的呢?****** 海龟绘图时默认的形状是第一种“classic”,如果想要召唤海龟真身,需要用turtle指令shape("turtle")。海龟绘图时默认的颜色是黑色“black”。 ![](http://h.yiniuedu.com/30e921a6f28f145afd006d1e3f10e6f1) ![](http://h.yiniuedu.com/58d3479157938dfe77305e5327e229b1)  【代码参考】 温馨提示:本案例代码虽长,但都是顺序结构,容易理解。 ``` # 海龟写古诗《元日》 ### 程序初始化设置 import turtle turtle.bgcolor("#b1352b") # 设置背景颜色为#b1352b,一种红色。ffffff为白色 turtle.speed(0) # 设置海龟绘图的速度,参数为0时最快 turtle.pensize(1) # 设置画笔粗细,即竖线的粗线为1 turtle.pencolor("#f2ea99") # 设置画笔颜色,即竖线和书法的颜色为#f2ea99,一种黄色。000000为黑色 fontname="对酒当歌行书" # 字体名称 fontsize=35 # 字体大小 column1="爆竹声中一岁除" # column是列的英文单词 column2="春风送暖入屠苏" column3="千门万户曈曈日" column4="总把新桃换旧符" column5="宋王安石元日" column6="壬寅除夕沂牛教育书" colwidth=100 # 设置列宽colwidth ### ① 画竖线 x=245 # 确定第一条竖线顶端的横坐标 y=230 # 确定第一条竖线顶端的纵坐标 for i in range(6): # 循环6次,画6根竖线 turtle.penup() # 海龟抬笔,没有移动(绘画)痕迹 turtle.goto(x,y) # 海龟移动至坐标(x,y) turtle.pendown() # 海龟落笔,移动(绘画)有痕迹 turtle.setheading(-90) # 让海龟的头部朝下 turtle.forward(460) # 让海龟前进460个像素,即竖线的长度是460像素 x=x-colwidth # 将横坐标重新赋值为原横坐标减去列宽colwidth ### ② 海龟写诗《元日》 turtle.speed(5) # 重新设置海龟写字的速度 # 写第1列 x=200 # 设置第1列文字第1个字的横坐标 y=160 # 设置第1列文字第1个字的纵坐标 for i in range(7): # 第1列共显示7个字,所以循环7次 turtle.penup() # 海龟抬笔,没有移动(绘画)痕迹 turtle.goto(x,y) # 海龟移动至坐标(x,y) turtle.pendown() # 海龟落笔,移动(绘画)有痕迹 turtle.write(column1[i], align="center",font=(fontname,fontsize,"normal")) y=y-60 # 每个字间隔60个像素 # 写第2列 x=x-colwidth y=160 for i in range(7): # 第2列共显示7个字,所以循环7次 turtle.penup() turtle.goto(x,y) turtle.pendown() turtle.write(column2[i], align="center",font=(fontname,fontsize)) #第3个参数省略时默认为"normal" y=y-60 # 写第3列 x=x-colwidth y=160 for i in range(7): turtle.penup() turtle.goto(x,y) turtle.pendown() turtle.write(column3[i], align="center",font=(fontname,fontsize)) y=y-60 # 写第4列 x=x-colwidth y=160 for i in range(7): turtle.penup() turtle.goto(x,y) turtle.pendown() turtle.write(column4[i], align="center",font=(fontname,fontsize)) y=y-60 ### ③ 写落款 # 写第5列 x=x-80 # 设置第5列第一个字的横坐标位置 y=100 # 设置第5列第一个字的纵坐标位置 for i in range(6): # 第5列共显示6个字,所以循环6次 turtle.penup() turtle.goto(x,y) turtle.pendown() turtle.write(column5[i], align="center",font=("对酒当歌行书",20,)) y=y-30 # 落款每个字的间隔是30。字小间隔也要小 # 写第6列 x=x-40 y=100 for i in range(9): # 第6列共显示9个字,所以循环9次 turtle.penup() turtle.goto(x,y) turtle.pendown() turtle.write(column6[i], align="center",font=("对酒当歌行书",20)) y=y-30 ### 落款盖印章 # “咱海龟也有自己专属的印章呢!今天是除夕,我必须得现出真身来,不然大家都还以为我只是一个小小的箭头呢。” turtle.penup() turtle.forward(10) turtle.pendown() turtle.setheading(0) # 让海龟的头部朝右 turtle.color("#e1f4d6") # 设置海龟显示的颜色 turtle.shape("classic") # 设置海龟显示的形状 # turtle.hideturtle() # 这次就不需要使用此代码隐藏海龟了 turtle.done() ```