前言:
现在咱们对“pythonturtle库seth”都比较着重,大家都想要学习一些“pythonturtle库seth”的相关文章。那么小编同时在网上网罗了一些关于“pythonturtle库seth””的相关知识,希望咱们能喜欢,你们快快来了解一下吧!小朋友们好,大朋友们好!
我是猫妹,一名爱上Python编程的小学生。
欢迎和猫妹一起,趣味学Python。
今日主题
介绍下Python的turtle库,这是一个可以画画的库,非常适合小孩子在屏幕上画画。
先学习基础知识,后面分享几个有趣的程序。
LOGO语言
LOGO语言“logo”一词源于希腊文,原意为“文字”或“思考”、“想法”。
是一种过程性语言,是在1967年由美国麻省理工学院(MIT)佩帕特(Seymour Papert)教授指导下的一个研究小组在LISP语言基础上,专门为儿童研制开发的编程语言。
Logo语言虽然结构简单、却有丰富的表达方式,体现了现代计算机科学许多最新概念。
在LOGO的世界里,人们可以通过编程输入指令,让小海龟在画面上走动,向左右上下,或者按照设定的角度移动,或者重复做某一件事情。
简单的绘图指令,加上判断、循环等程序设计方法,可以绘制出美丽的图案,比如人物、动物、植物、抽象画等等。
turtle库
Python内置了turtle库,借鉴了LOGO语言海龟画图的所有绘图功能。
画布(canvas)
所谓画布,就是将这些东西都存放在一个位置进行设定,方便展开绘画的区域。
常见的方式有两种:
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
三个参数,分别是设置画布的宽、高及背景样式的操作,在使用的时候,宽的单位为像素
比如:
turtle.screensize(600, 400, "green")
turtle.screensize() #返回默认大小(400, 300)
turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
前面两个参数是设置画布的宽和高的,当它们为整数的时候表示的是像素,如果是小数就表示当前使用电脑的屏幕比例。
后面两个参数设置的是矩形窗口顶点的位置,当值为空时,默认窗口会在屏幕的中间出现。
比如:
turtle.setup(width=0.6, height=0.6)
turtle.setup(width=800, height=800, startx=100, starty=100)
绘图屏幕坐标系
画笔
turtle.shape("turtle")可指定画笔的形状
classic,arrow,tutle(缺省默认值),circle,square,triangle
turtle.pensize():设置画笔的宽度。
turtle.speed():画笔的移动速度,范围为0到无穷大。
turtle.pencolor():设置获取画笔颜色。
绘图控制
向前移动:tutle.forward(distance),tutle.fd(distance)
向后移动:tutle.backward(distance),tutle.bk(distance)
向左旋转:tutle.left(angle),tutle.lt(angle)
向右旋转:tutle.right(angle),tutle.rt(angle)
向左旋转角度:tutle.seth(angle)
画笔运动命令
tutle.forward(distance),tutle.fd(distance)
tutle.backward(distance),tutle.bk(distance)
tutle.left(angle),tutle.lt(angle)
tutle.right(angle),tutle.rt(angle)
tutle.pendown(),pd(),down():画笔落下,移动时绘制图形,缺省值
tutle.goto(x,y):画笔移动到(x,y)
tutle.penup(),pu(),up():画笔抬起,移动时不绘制图形
tutle.setx():将当前x轴移动到指定位
tutle.sety():将当前y轴移动到指定位置
tutle.setheading(angle),tutle.seth():设置当前朝向为angle的角度
tutle.home():设置画笔位置到原点,朝向东
画笔设置命令
tutle.pensize(width):画笔宽度
tutle.pencolor(colorstring):画笔颜色
tutle.colormode(mode):改变颜色生成模式
tutle.fillcolor(colorstring):绘制图形填充颜色
tutle.color(color1,color2):同时设置pencolor=color1,fillcolor=color2
tutle.filling():返回当前是否在填充装填
tutle.begin_fill():准备开始填充图形
tutle.end_fill():填充完成
tutle.hideturle():隐藏画笔形状
tutle.showturle():显示画笔形状
画笔控制命令
tutle.clear():清空turle窗口,但turtle位置和状态不改变
tutle.reset():清空窗口,重置turtle状态为起始状态
tutle.undo():撤销上一个turtle动作
tutle.isvisable():返回当前turtle是否可见
tutle.stamp():复制当前图形
tutle.write(s,font):写文本s,字体是font
tutle.dot(r,color):绘制一个指定直径和颜色的原点
tutle.circle(radius,extents,steps):以给定半径画圆,半径radius为正(负),表示圆心在画笔的左边(右边)画圆
其他高级命令
tutle.done():程序暂停,直到用户关闭。一般是最后一个语句
tutle.mode(mode=None):设置standard,logo,world
tutle.delay(delay=None):设置或返回以毫秒为单位的绘图延迟
tutle.begin_poly():开始记录多边形的顶点
tutle.end_poly():停止记录多边形的顶点
tutle.get_poly():返回最后记录的多边形
模式‘standard’与turtle.py兼容。
模式‘logo’与大多数Logo-Turtle-Graphics兼容。
模式‘world’使用用户定义的‘worldcoordinates’。
程序一,简易时钟
# coding=utf-8import turtlefrom datetime import * # 由于表盘刻度不连续,需频繁抬起画笔,放下画笔def skip(step): turtle.penup() # 画笔抬起 turtle.forward(step) # 画笔移动step turtle.pendown() # 画笔落下 # 建立表针,定制表针形状和名字def make_hand(name, length): turtle.reset() skip(-length * 0.1) # 表针一端,过表盘中心一小段,开始绘制 turtle.begin_poly() # 开始记录多边形的第一个顶点。 turtle.forward(length * 1.1) # 设置表针长度,绘制表针 turtle.end_poly() # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。 handForm = turtle.get_poly() # 返回最后记录的形状 turtle.color('black') turtle.register_shape(name, handForm) # 三个表针初始化,实例化def init_hand(): global sec_hand, min_hand, hou_hand, printer # 重置Turtle指向北 turtle.mode("logo") # logo:向上(北) 顺时针 standard:向右(东) 逆时针 # 建立三个表针Turtle并初始化 make_hand("sec_Hand", 135) make_hand("min_Hand", 110) make_hand("hou_Hand", 70) sec_hand = turtle.Turtle() sec_hand.shape("sec_Hand") min_hand = turtle.Turtle() min_hand.shape("min_Hand") hou_hand = turtle.Turtle() hou_hand.shape("hou_Hand") # 笔的属性 for hand in sec_hand, min_hand, hou_hand: hand.shapesize(1, 1, 3) hand.speed(0) # 建立输出打印的文字Turtle printer = turtle.Turtle() # 隐藏画笔的turtle形状 printer.hideturtle() printer.penup() # 设置表盘def set_clock(radius): turtle.reset() turtle.pencolor('black') # 设置画笔颜色 turtle.fillcolor('pink') # 设置绘制图形的填充颜色 turtle.pensize(10) # 画笔宽度 for i in range(60): skip(radius) # 逢五 使用线条并加粗 if i % 5 == 0: turtle.forward(20) skip(-radius - 20) skip(radius + 20) # 设置数字的位置及字体,大小 if i == 0: turtle.write(int(12), align="center", font=("Courier", 14, "bold")) elif i == 30: skip(25) turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold")) skip(-25) elif i == 25 or i == 35: skip(20) turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold")) skip(-20) else: turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold")) skip(-radius - 20) # 非五,以点代替 else: turtle.dot(5) skip(-radius) turtle.right(6) # 显示星期def show_week(t): week = ["星期一 Mon", "星期二 Tue", "星期三 Wed", "星期四 Thu", "星期五 Fri", "星期六 Sat", "星期日 Sun"] return week[t.weekday()] # t.weekday() 周一为0,周二为1...可作为列表的index # 显示日期def show_data(t): y = t.year m = t.month d = t.day return "{} 年 {} 月 {} 日".format(y, m, d) # 显示整个时钟def show_clock(): # 获取时间 t = datetime.today() second = t.second + t.microsecond * 0.000001 minute = t.minute + second / 60.0 hour = t.hour + minute / 60.0 sec_hand.setheading(6 * second) min_hand.setheading(6 * minute) hou_hand.setheading(30 * hour) turtle.tracer(False) printer.back(65) printer.write(show_week(t), align='center', font=("Courier", 14, "bold")) printer.forward(65) printer.write(show_data(t), align='center', font=("Courier", 14, "bold")) # 回到原点,以便于下一轮的显示 printer.home() turtle.tracer(True) # 100ms后继续调用show_clock turtle.ontimer(show_clock, 100) # main函数def main(): turtle.tracer(False) # 设置背景 ts = turtle.getscreen() ts.bgcolor("#cccccc") # 初始化 init_hand() # 设置时钟 set_clock(180) turtle.tracer(True) # 显示时钟 show_clock() turtle.mainloop() if __name__ == "__main__": main()
程序二,佩奇
import turtle as tt.pensize(4)t.hideturtle()t.colormode(255)t.color((255, 155, 192), "pink")t.setup(840, 500)t.speed(20)# 鼻子t.pu()t.goto(-100, 100)t.pd()t.seth(-30)t.begin_fill()a = 0.4for i in range(120): if 0 <= i < 30 or 60 <= i < 90: a = a + 0.08 t.lt(3) # 向左转3度 t.fd(a) # 向前走a的步长 else: a = a - 0.08 t.lt(3) t.fd(a)t.end_fill()t.pu()t.seth(90)t.fd(25)t.seth(0)t.fd(10)t.pd()t.pencolor(255, 155, 192)t.seth(10)t.begin_fill()t.circle(5)t.color(160, 82, 45)t.end_fill()t.pu()t.seth(0)t.fd(20)t.pd()t.pencolor(255, 155, 192)t.seth(10)t.begin_fill()t.circle(5)t.color(160, 82, 45)t.end_fill()# 头t.color((255, 155, 192), "pink")t.pu()t.seth(90)t.fd(41)t.seth(0)t.fd(0)t.pd()t.begin_fill()t.seth(180)t.circle(300, -30)t.circle(100, -60)t.circle(80, -100)t.circle(150, -20)t.circle(60, -95)t.seth(161)t.circle(-300, 15)t.pu()t.goto(-100, 100)t.pd()t.seth(-30)a = 0.4for i in range(60): if 0 <= i < 30 or 60 <= i < 90: a = a + 0.08 t.lt(3) # 向左转3度 t.fd(a) # 向前走a的步长 else: a = a - 0.08 t.lt(3) t.fd(a)t.end_fill()# 耳朵t.color((255, 155, 192), "pink")t.pu()t.seth(90)t.fd(-7)t.seth(0)t.fd(70)t.pd()t.begin_fill()t.seth(100)t.circle(-50, 50)t.circle(-10, 120)t.circle(-50, 54)t.end_fill()t.pu()t.seth(90)t.fd(-12)t.seth(0)t.fd(30)t.pd()t.begin_fill()t.seth(100)t.circle(-50, 50)t.circle(-10, 120)t.circle(-50, 56)t.end_fill()# 眼睛t.color((255, 155, 192), "white")t.pu()t.seth(90)t.fd(-20)t.seth(0)t.fd(-95)t.pd()t.begin_fill()t.circle(15)t.end_fill()t.color("black")t.pu()t.seth(90)t.fd(12)t.seth(0)t.fd(-3)t.pd()t.begin_fill()t.circle(3)t.end_fill()t.color((255, 155, 192), "white")t.pu()t.seth(90)t.fd(-25)t.seth(0)t.fd(40)t.pd()t.begin_fill()t.circle(15)t.end_fill()t.color("black")t.pu()t.seth(90)t.fd(12)t.seth(0)t.fd(-3)t.pd()t.begin_fill()t.circle(3)t.end_fill()# 腮t.color((255, 155, 192))t.pu()t.seth(90)t.fd(-95)t.seth(0)t.fd(65)t.pd()t.begin_fill()t.circle(30)t.end_fill()# 嘴t.color(239, 69, 19)t.pu()t.seth(90)t.fd(15)t.seth(0)t.fd(-100)t.pd()t.seth(-80)t.circle(30, 40)t.circle(40, 80)# 身体t.color("red", (255, 99, 71))t.pu()t.seth(90)t.fd(-20)t.seth(0)t.fd(-78)t.pd()t.begin_fill()t.seth(-130)t.circle(100, 10)t.circle(300, 30)t.seth(0)t.fd(230)t.seth(90)t.circle(300, 30)t.circle(100, 3)t.color((255, 155, 192), (255, 100, 100))t.seth(-135)t.circle(-80, 63)t.circle(-150, 24)t.end_fill()# 手t.color((255, 155, 192))t.pu()t.seth(90)t.fd(-40)t.seth(0)t.fd(-27)t.pd()t.seth(-160)t.circle(300, 15)t.pu()t.seth(90)t.fd(15)t.seth(0)t.fd(0)t.pd()t.seth(-10)t.circle(-20, 90)t.pu()t.seth(90)t.fd(30)t.seth(0)t.fd(237)t.pd()t.seth(-20)t.circle(-300, 15)t.pu()t.seth(90)t.fd(20)t.seth(0)t.fd(0)t.pd()t.seth(-170)t.circle(20, 90)# 脚t.pensize(10)t.color((240, 128, 128))t.pu()t.seth(90)t.fd(-75)t.seth(0)t.fd(-180)t.pd()t.seth(-90)t.fd(40)t.seth(-180)t.color("black")t.pensize(15)t.fd(20)t.pensize(10)t.color((240, 128, 128))t.pu()t.seth(90)t.fd(40)t.seth(0)t.fd(90)t.pd()t.seth(-90)t.fd(40)t.seth(-180)t.color("black")t.pensize(15)t.fd(20)# 尾巴t.pensize(4)t.color((255, 155, 192))t.pu()t.seth(90)t.fd(70)t.seth(0)t.fd(95)t.pd()t.seth(0)t.circle(70, 20)t.circle(10, 330)t.circle(70, 30)t.exitonclick()
程序三,玫瑰花
import turtleturtle.speed(5) # 设置初始位置 turtle.penup() turtle.left(90) turtle.fd(200) turtle.pendown() turtle.right(90)# 花蕊 turtle.fillcolor("red") turtle.begin_fill() turtle.circle(10,180) turtle.circle(25,110) turtle.left(50) turtle.circle(60,45) turtle.circle(20,170) turtle.right(24) turtle.fd(30) turtle.left(10) turtle.circle(30,110) turtle.fd(20) turtle.left(40) turtle.circle(90,70) turtle.circle(30,150) turtle.right(30) turtle.fd(15) turtle.circle(80,90) turtle.left(15) turtle.fd(45) turtle.right(165) turtle.fd(20) turtle.left(155) turtle.circle(150,80) turtle.left(50) turtle.circle(150,90) turtle.end_fill() # 花瓣1 turtle.left(150) turtle.circle(-90,70) turtle.left(20) turtle.circle(75,105) turtle.setheading(60) turtle.circle(80,98) turtle.circle(-90,40) # 花瓣2 turtle.left(180) turtle.circle(90,40) turtle.circle(-80,98) turtle.setheading(-83) # 叶子1 turtle.fd(30) turtle.left(90) turtle.fd(25) turtle.left(45) turtle.fillcolor("green") turtle.begin_fill() turtle.circle(-80,90) turtle.right(90) turtle.circle(-80,90) turtle.end_fill() turtle.right(135) turtle.fd(60) turtle.left(180) turtle.fd(85) turtle.left(90) turtle.fd(80) # 叶子2 turtle.right(90) turtle.right(45) turtle.fillcolor("green") turtle.begin_fill() turtle.circle(80,90) turtle.left(90) turtle.circle(80,90) turtle.end_fill() turtle.left(135) turtle.fd(60) turtle.left(180) turtle.fd(60) turtle.right(90) turtle.circle(200,60)
怎么样?
有趣吧?
好了,我们今天就学到这里吧!
如果遇到什么问题,咱们多多交流,共同解决。
我是猫妹,咱们下次见!
标签: #pythonturtle库seth