turtle模块是基于tkinter的模块,实现(主要画图)许多功能,这里,我们就用turtle画一个中国结吧!
介绍:
使用:turtle(画);math.sqrt(辅助)
一、导入
import turtle as t#导入turtle 老规矩,as t
from math import sqrt#导入平方根
二、中国结
class chineseKnot:#中国结
'''中国结'''
三、‘初始化’函数
def __init__(self) -> None:
# 画笔初始化
self.t = t
self.t.title("中国结")#标题
self.t.pensize(10)#笔粗
self.t.setup(700, 700)#界面大小
self.t.pencolor("red")#画笔颜色
self.t.speed('fastest')#速度
# 结心坐标
self.x = 0
self.y = 200
四、画
(所用的函数均在下文定义)
def drawKnot(self) -> None:
self.drawBody()
self.drawEdge()
self.drawAdorn()
self.t.hideturtle()#隐藏画笔
self.t.done()#完成
(1)、画(步骤一)
def drawBody(self) -> None:
for i in range(11):#循环
self.__goto(self.x - i * 10 * sqrt(2), self.y - i * 10 * sqrt(2))
self.t.seth(-45)
self.t.fd(200)
self.__goto(self.x + i * 10 * sqrt(2), self.y - i * 10 * sqrt(2))
self.t.seth(-135)
self.t.fd(200)
(2)、画(步骤二)
def drawEdge(self) -> None:
for i in range(4):
# 左上角
self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2),
200 - 10 * sqrt(2) - i * 20 * sqrt(2))
self.t.seth(135)
self.t.fd(20)
self.t.circle(10, 180)
self.t.fd(20)
# 右上角
self.__goto(10 * sqrt(2) + i * 20 * sqrt(2),
200 - 10 * sqrt(2) - i * 20 * sqrt(2))
self.t.seth(45)
self.t.fd(20)
self.t.circle(-10, 180)
self.t.fd(20)
# 左下角
self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2),
200 - 190 * sqrt(2) + i * 20 * sqrt(2))
self.t.seth(-135)
self.t.fd(20)
self.t.circle(-10, 180)
self.t.fd(20)
# 右下角
self.__goto(10 * sqrt(2) + i * 20 * sqrt(2),
200 - 190 * sqrt(2) + i * 20 * sqrt(2))
self.t.seth(-45)
self.t.fd(20)
self.t.circle(10, 180)
self.t.fd(20)
# 左侧
self.t.seth(-45)
self.__goto(90 * sqrt(2), 200 - 110 * sqrt(2))
self.t.circle(20, 270)
self.__goto(-90 * sqrt(2), 200 - 110 * sqrt(2))
self.t.circle(-20, 270)
# 右侧
self.__goto(80 * sqrt(2), 200 - 120 * sqrt(2))
self.t.circle(40, 270)
self.__goto(-80 * sqrt(2), 200 - 120 * sqrt(2))
self.t.circle(-40, 270)
def drawAdorn(self):
# 上侧
self.__goto(self.x, self.y)
self.t.pensize(14)
self.t.seth(90)
self.t.fd(60)
self.__goto(0, 320)
self.t.seth(180)
self.t.circle(30, 360)
# 下侧
self.__goto(0, 200 - 200 * sqrt(2))
self.t.pensize(40)
self.t.seth(-90)
self.t.fd(20)
self.t.pensize(2)
for i in range(11):
self.__goto(-20 + 4 * i, 200 - 200 * sqrt(2))
self.t.seth(-90)
self.t.fd(200)
(3)画(步骤三)
def __goto(self, x: int, y: int) -> None:
self.t.penup()#抬笔
self.t.goto(x, y)#到x,y
self.t.pendown()#落笔
五、运行
if __name__ == '__main__':#运行
knot = chineseKnot()
knot.drawKnot()
完成啦!
六、完整代码
import turtle as t#导入turtle 老规矩,as t
from math import sqrt#导入平方根
class chineseKnot:#中国结
'''中国结'''
def __init__(self) -> None:
# 画笔初始化
self.t = t
self.t.title("中国结")#标题
self.t.pensize(10)#笔粗
self.t.setup(700, 700)#界面大小
self.t.pencolor("red")#画笔颜色
self.t.speed('fastest')#速度
# 结心坐标
self.x = 0
self.y = 200
def drawKnot(self) -> None:
self.drawBody()
self.drawEdge()
self.drawAdorn()
self.t.hideturtle()#隐藏画笔
self.t.done()#完成
def drawBody(self) -> None:
for i in range(11):#循环
self.__goto(self.x - i * 10 * sqrt(2), self.y - i * 10 * sqrt(2))
self.t.seth(-45)
self.t.fd(200)
self.__goto(self.x + i * 10 * sqrt(2), self.y - i * 10 * sqrt(2))
self.t.seth(-135)
self.t.fd(200)
def drawEdge(self) -> None:
for i in range(4):
# 左上角
self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2),
200 - 10 * sqrt(2) - i * 20 * sqrt(2))
self.t.seth(135)
self.t.fd(20)
self.t.circle(10, 180)
self.t.fd(20)
# 右上角
self.__goto(10 * sqrt(2) + i * 20 * sqrt(2),
200 - 10 * sqrt(2) - i * 20 * sqrt(2))
self.t.seth(45)
self.t.fd(20)
self.t.circle(-10, 180)
self.t.fd(20)
# 左下角
self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2),
200 - 190 * sqrt(2) + i * 20 * sqrt(2))
self.t.seth(-135)
self.t.fd(20)
self.t.circle(-10, 180)
self.t.fd(20)
# 右下角
self.__goto(10 * sqrt(2) + i * 20 * sqrt(2),
200 - 190 * sqrt(2) + i * 20 * sqrt(2))
self.t.seth(-45)
self.t.fd(20)
self.t.circle(10, 180)
self.t.fd(20)
# 左侧
self.t.seth(-45)
self.__goto(90 * sqrt(2), 200 - 110 * sqrt(2))
self.t.circle(20, 270)
self.__goto(-90 * sqrt(2), 200 - 110 * sqrt(2))
self.t.circle(-20, 270)
# 右侧
self.__goto(80 * sqrt(2), 200 - 120 * sqrt(2))
self.t.circle(40, 270)
self.__goto(-80 * sqrt(2), 200 - 120 * sqrt(2))
self.t.circle(-40, 270)
def drawAdorn(self):
# 上侧
self.__goto(self.x, self.y)
self.t.pensize(14)
self.t.seth(90)
self.t.fd(60)
self.__goto(0, 320)
self.t.seth(180)
self.t.circle(30, 360)
# 下侧
self.__goto(0, 200 - 200 * sqrt(2))
self.t.pensize(40)
self.t.seth(-90)
self.t.fd(20)
self.t.pensize(2)
for i in range(11):
self.__goto(-20 + 4 * i, 200 - 200 * sqrt(2))
self.t.seth(-90)
self.t.fd(200)
def __goto(self, x: int, y: int) -> None:
self.t.penup()
self.t.goto(x, y)
self.t.pendown()
if __name__ == '__main__':#运行
knot = chineseKnot()
knot.drawKnot()
七、运行效果
最后,我们可以添加一些代码,例如当键盘按下‘d’时结束运行,按下’q’时退出等
Bye!