1 说明
====
1.1 环境:python3.8,集成(内置)turtle库;华为笔记本电脑+deepin-linux操作系统。
1.2 turtle库入门级介绍:基本了解turtle库,python基础知识复习,讲解清楚,注释仔细,小白秒懂,逐步深入,适合仔细品读。
1.3 代码来自turtle demo和网络(自己整理和加工),仅供学习,如有侵权,请联系,定删。
2 海龟画图初级
===========
2.1 基本窗口设置和图片显示
2.2 显示图片
2.3 代码:
#自定义窗口大小,背景颜色#窗口标题名,位置import turtle as t#方法一#其实是通过设置画布大小来改变窗口大小#t.screensize(800, 600, "green")#screensize() #返回默认大小(400, 300)#用screensize设置的是画布大小及背景色,窗体和画布不是一个概念#会出现滚动条#方法二#屏幕的宽和高的百分百,默认位置屏幕的居中#t.setup(width=0.6, height=0.6)#指定窗口大小和位置,注意左上角坐标为0,0t.setup(width=800, height=800, startx=100, starty=100)#载入背景图片,是原图大小显示与窗口大小不是自适应#t.bgpic('/home/xgj/Desktop/turtle/1.jpeg') #bug,可以识别png图片,但是jpeg不行#用截图工具,截图生产png,可以。#网上说只能显示gif图片,其实还可以显示png图片t.bgpic('/home/xgj/Desktop/turtle/2.png') #请注意,还可以显示gif图片,但是gif图片是不动的#窗口的标题名#默认为Python Turtle Graphics#t.title('good') #可自定义#需要手动关闭t.done()
3 太阳花
======
3.1 效果图
3.2 代码:
#太阳花import turtle as t#turtle.color(color1, color2)#同时设置pencolor=color1, fillcolor=color2#默认第一画笔颜色,第二为填充颜色t.color("red", "yellow")#画笔速度#画笔绘制的速度范围[0,10]整数,数字越大越快t.speed(10)#注意颜色填充fill需要begin和end之间#类似一对括号t.begin_fill()#下划线表示 临时变量, 仅用一次,后面无需再用到for _ in range(50): #向前走长度=distance t.forward(200) #向左转,逆时针转动角度=degree t.left(170)t.end_fill()t.done()#补充:#t.backward() #向后走长度#t.right() #向右转,顺时针转动角度
4 画圆和多边形
============
4.1 效果图
4.2 代码
from turtle import * #turtle.circle(radius, extent=None, steps=None)#extent为度数,默认360°,也就是一圈#steps数值越大,圆的弧线越平滑,一般推荐50,不设置就是默认#circle(100) #默认360°为一圈circle(200,360,50) #圆circle(200,360,3) #为三角形circle(200,360,9) #为9边形done()
4.3 同心圆代码
from turtle import *#初始圆(最内部的圆)的半径r=50#同心圆间的距离linew=30circle(r)# 修改画笔宽度#pensize(5)# for循环,用于绘制同心圆for i in range(1,9): # 画笔抬起(不会在窗体上留下痕迹) penup() # 移动画笔到坐标(0,-10*i) #去某个坐标点 goto(0,-linew*i) # 画笔落下(开始在窗体上留下痕迹) pendown() # 在循环中不断绘制半径不同的圆 circle(r+i*linew)done()
4.4 同心圆效果图
4.5 移动的圆
==========
4.5.1 效果图
4.5.2 代码
#移动的圆from turtle import * bgcolor('black')#该函数学习# 自定义坐标系统,并切换到 world 模式setworldcoordinates(-100,-100, 150, 100) speed(0) pendown() pencolor('green')#画圆circle(30,360,50) for s in range(400): setworldcoordinates(-100,-100, 10+s*0.5, 100)done()
5 高级一点
========
5.1 效果图
5.2 代码
import turtle as t t.bgcolor("black")sides=6 #6边colors=["red","yellow","green","blue","orange","purple"]#120为圈数,层数for x in range(120): t.pencolor(colors[x%sides]) t.forward(x*3/sides+x) t.left(360/sides+1) t.width(x*sides/200)t.done()
5.3 输入文字的代码
import turtle as t #画布的背景颜色设置t.bgcolor("black")#textinput是调用tkinter的弹出框#第一个字符串为弹出窗口的标题名#第二个字符串为输入框上面的文字名my_name=t.textinput("输入你的姓名","你的名字?")colors=["red","yellow","purple","blue"]#100为一百圈for x in range(100): #画笔的颜色选择 t.pencolor(colors[x%4]) #提笔 t.penup() #向前步长 t.forward(x*4) #落笔 t.pendown() #文字输出 t.write(my_name,font=("Arial",int((x+4)/4),"bold")) #向左转动92° t.left(92) #结束后手动关闭窗口t.done()
5.4 效果图
6 画树
====
6.1 图
6.2 代码
#画树#熟悉可能的缩写from turtle import *from random import *from math import * def tree(n, l): pd() # 下笔 pendown # 阴影效果 t = cos(radians(heading() + 45)) / 8 + 0.25 pencolor(t, t, t) pensize(n / 3) forward(l) # 画树枝,fd=forward if n > 0: b = random() * 15 + 10 # 右分支偏转角度 c = random() * 15 + 10 # 左分支偏转角度 d = l * (random() * 0.25 + 0.7) # 下一个分支的长度 # 右转一定角度,画右分支 right(b) tree(n - 1, d) # 左转一定角度,画左分支 left(b + c) tree(n - 1, d) # 转回来 right(c) else: # 画叶子 right(90) n = cos(radians(heading() - 45)) / 4 + 0.5 pencolor(n, n*0.8, n*0.8) circle(3) left(90) # 添加0.3倍的飘落叶子 if(random() > 0.7): pu() # 飘落 t = heading() an = -40 + random()*40 setheading(an) dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2) forward(dis) setheading(t) # 画叶子 pd() #pendown right(90) n = cos(radians(heading() - 45)) / 4 + 0.5 pencolor(n*0.5+0.5, 0.4+n*0.4, 0.4+n*0.4) circle(2) left(90) pu() #penup #返回 t = heading() setheading(an) backward(dis) setheading(t) pu() #penup=提笔 backward(l)# 退回 #bgcolor(0.5, 0.5, 0.5) # 背景色bgcolor('black')ht() # 隐藏turtle=hideturtlespeed(0) # 速度,1-10渐进,0最快tracer(0, 0)pu() # 抬笔backward(100)left(90) # 左转90度pu() # 抬笔backward(300) # 后退300tree(12, 100) # 递归7层done()
7 高级互动性
==========
7.1 效果图
7.2 代码
from turtle import Screen,Turtle,mainloopclass ColorTurtle(Turtle): #类的初始化定义 def __init__(self,x,y): Turtle.__init__(self) self.shape("turtle") self.resizemode("usre") self.shapesize(3,3,0) self.pensize(10) self._color=[0,0,0] self.x=x self._color[x]=y self.color(self._color) self.speed(0) self.left(90) self.up() self.goto(x,0) self.down() self.sety(1) self.up() self.sety(y) self.pencolor("black") self.ondrag(self.shift) #类的函数定义 def shift(self,x,y): self.sety(max(0,min(y,1))) self._color[self.x]=self.ycor() self.fillcolor(self._color) setbgcolor()#独立的函数定义def setbgcolor(): screen.bgcolor(red.ycor(),green.ycor(),blue.ycor()) #主函数定义def main(): global screen,red,green,blue screen=Screen() screen.delay(0) screen.setworldcoordinates(-1,-0.3,3,1.3) red=ColorTurtle(0,.7) green=ColorTurtle(1,.3) blue=ColorTurtle(2,.6) setbgcolor() if __name__=="__main__": main() mainloop()
代码来源网络,仅供学习。