Python turtle库绘图制作 — 弹幕生成器
使用turtle的write函数写弹幕,textinput输入汉字,numinput输入字号
代码效果:
下面是turtle官方文档:
官方文档
本文目录
- 一、导入库
-
- 1、第一种方法
- 2、第二种方法
- 二、流程图
- 三、设置窗口
-
- 1、设置窗口标题
- 2、设置窗口大小
- 3、取消绘图过程
- 四、设置画笔
-
- 1、隐藏画笔
- 2、画笔颜色
- 3、初始位置
- 五、输入
-
- 1、输入文字
- 2、输入文字大小
- 六、编写主循环
-
- 1、画出弹幕
- 2、设置动画
- 3、碰到边缘重新输入
- 七、完整代码
一、导入库
使用turtle需要导入turtle库
1、第一种方法
可以用import xxx
import turtle
2、第二种方法
也可以用from xxx import xxx
from turtle import *
不管用那个方法,只要能导入就可以了
二、流程图
现在知道流程是什么了,开始写代码吧
三、设置窗口
1、设置窗口标题
设置标题需要用title函数
title的中文就是标题
turtle.title('弹幕生成器 - 作者:Ed~dy')
2、设置窗口大小
设置窗口大小需要用setup函数
同样,setup的中文就是设置
turtle.setup(900, 400)
经过尝试,窗口大小900, 400是最好的
3、取消绘图过程
取消绘图过程需要用tracer函数
取消的原因是因为让文字移动更流畅一些
turtle.tracer(0)
四、设置画笔
1、隐藏画笔
隐藏画笔的函数是hideturtle
hide为隐藏,turtle为海龟
意思就是隐藏画笔海龟
turtle.hideturtle()
2、画笔颜色
设置画笔颜色的函数是pencolor
字面意思就是画笔颜色
很容易理解
turtle.pencolor('green')
设置画笔颜色为绿色,也可以设置其他颜色,还可以写16进制,例如turtle.penolor('#FFFFFF')
下面是颜色表,可以随便挑一个
3、初始位置
初始位置就是画弹幕的位置
代码:
turtle.goto(450, 0)
因为有tracer(0),所以不需要抬笔、落笔也不会画出线
goto是移动到指定坐标位置
按照900, 400的窗口大小
画弹幕的位置为450, 0最好
五、输入
1、输入文字
在turtle中,弹出输入窗口有两种:
一种是textinput()
一种是numinput()
一个输入文字,返回str类型
一个输入数字,返回float类型
所以输入文字用的是textinput
text = turtle.textinput('弹幕内容', '请输入弹幕内容')
在上面的代码中textinput函数第一个参数为弹出窗口的标题,第二个参数为弹出窗口的提示信息
2、输入文字大小
输入文字大小应该用numinput,原因是因为输入的是数字,要注意的是size是浮点型
size = turtle.numinput('弹幕字号', '请输入弹幕字号')
同样,在上面的代码中numinput函数第一个参数为弹出窗口的标题,第二个参数为弹出窗口的提示信息
六、编写主循环
1、画出弹幕
画出文字要用write函数
write就是写的意思
while True:
turtle.write(text, font=('宋体', int(size), 'bold'))
这里的write写了2个参数,第一个是要写的文字,第二个参数是设置字体,大小,样式,以元组形式组成
这里用numinput输入的size类型为浮点型
2、设置动画
在turtle中动画需要三步
1、画出 — 2、清除 — 3、移动
相应的代码就是:
turtle.write(text, font=('宋体', int(size), 'bold'))
time.sleep(0.01)
turtle.clear()
turtle.backward(1)
但是,为了动画流畅,需要在最前面写上tracer(0),还要适当的让程序慢一点,这里用到了time库的sleep函数,用来暂停程序,后面的单位为秒
clear()函数是清除所有画过的内容
backward是往后移动
因为弹幕是从左到右动的,所以用backward
3、碰到边缘重新输入
判断画笔是否碰到边缘就是x坐标是否小于等于-450
获取画笔x坐标位置的函数是xcor()
拓展:获取画笔y坐标位置的函数是ycor()
如果碰到边缘重新输入文字和文字大小
代码:
if turtle.xcor() > -450:
turtle.write(text, font=('宋体', int(size), 'bold'))
time.sleep(0.01)
turtle.clear()
turtle.backward(1)
elif turtle.xcor() -450:
text = turtle.textinput('弹幕内容', '请输入弹幕内容')
size = turtle.numinput('弹幕字号', '请输入弹幕字号')
turtle.goto(450, 0)
七、完整代码
完整代码在下面:
完整代码