zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Python turtle绘图:弹幕生成器

2023-04-18 14:15:49 时间

Python turtle库绘图制作 — 弹幕生成器
使用turtle的write函数写弹幕,textinput输入汉字,numinput输入字号

代码效果:
代码效果
下面是turtle官方文档:
官方文档

一、导入库

使用turtle需要导入turtle库

1、第一种方法

可以用import xxx

import turtle

2、第二种方法

也可以用from xxx import xxx

from turtle import *

不管用那个方法,只要能导入就可以了

二、流程图

Created with Raphaël 2.3.0 开始 设置 输入 写弹幕 死循环 yes

现在知道流程是什么了,开始写代码吧

三、设置窗口

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)

七、完整代码

完整代码在下面:
完整代码