turtle 绘画创意图形
画梅花
import turtle
from turtle import *
from random import *
def drawSnow():
hideturtle()
pensize(2)
for i in range(20):
pencolor("white")
penup()
setx(randint(-640, 640))
sety(randint(-400, 400))
pendown()
dens = randint(8, 12)
snowsize = randint(10, 14)
for j in range(dens):
forward(snowsize)
backward(snowsize)
right(360 / dens)
def gotopos(x, y):
up()
goto(x, y)
down()
ht()
def author():
pensize(2)
gotopos(610, -315)
lt(-90)
fd(80)
pensize(1)
lt(-270)
gotopos(478, -330)
color("#772a2b")
write("luxiaoguo", font=("华文隶书", 24))
gotopos(409, -360)
write("766389746@qq.com", font=("华文隶书", 18))
author()
def apply_rules(path, rules):
L = [_ for _ in path]
for i in range(len(L)):
symbol = L[i]
if symbol == 'F':
L[i] = rules[symbol]
if symbol == 'X':
L[i] = rules[symbol]
path = ''.join(L)
return path
def draw_path(path):
posList, angleList = [], []
for symbol in path:
if symbol == 'F':
forward(length)
elif symbol == '+':
left(angle)
elif symbol == '-':
rt(angle)
elif symbol == '[':
posList.append(pos())
angleList.append(heading())
elif symbol == 'a':
pensize(3)
color("black")
elif symbol == 'b':
pensize(2)
color("red")
elif symbol == 'c':
pensize(2)
color("black")
elif symbol == ']':
up()
home()
goto(posList.pop())
left(angleList.pop())
down()
def writez(x, y, str_, size=56, font="华文行楷"):
gotopos(x, y)
write(str_, font=(font, size))
turtle.setup(1280, 800)
speed(10)
bgcolor("Silver")
color("black")
writez(-213, -210, "梅", 196)
writez(-50, 100, "宋")
writez(80, 20, "王")
writez(33, -30, "安", 62)
writez(-18, -95, "石", 78)
color("black")
s = "墙角数枝梅"
s2 = "凌寒独自开"
s3 = "遥知不是雪"
s4 = "为有暗香来"
for i in range(len(s)):
writez(560, 350 - i * 50, s[i], 36)
for i in range(len(s2)):
writez(510, 320 - i * 50, s2[i], 36)
for i in range(len(s3)):
writez(460, 290 - i * 50, s3[i], 36)
for i in range(len(s4)):
writez(410, 260 - i * 50, s4[i], 36)
drawSnow()
gotopos(251, -36)
speed(10)
gotopos(-650, -200)
length = 7
path = 'X'
angle = 27
rules = {
'F': 'aFF[b-F++F][b+F--F]c++F--F',
'X': 'aFF+[b+F]+[c-F]'
}
for _ in range(4):
path = apply_rules(path, rules)
draw_path(path)
done()
时钟
import turtle
from datetime import *
def Skip(step):
turtle.penup()
turtle.forward(step)
turtle.pendown()
def mkHand(name, length):
turtle.reset()
Skip(-length * 0.1)
turtle.begin_poly()
turtle.forward(length * 1.1)
turtle.end_poly()
handForm = turtle.get_poly()
turtle.register_shape(name, handForm)
def Init():
global secHand, minHand, hurHand, printer
turtle.mode("logo")
mkHand("secHand", 135)
mkHand("minHand", 125)
mkHand("hurHand", 90)
secHand = turtle.Turtle()
secHand.shape("secHand")
minHand = turtle.Turtle()
minHand.shape("minHand")
hurHand = turtle.Turtle()
hurHand.shape("hurHand")
for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0)
printer = turtle.Turtle()
printer.hideturtle()
printer.penup()
def SetupClock(radius):
turtle.reset()
turtle.pensize(7)
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 Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()]
def Date(t):
y = t.year
m = t.month
d = t.day
return "%s %d%d" % (y, m, d)
def Tick():
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)
turtle.tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",
font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t), align="center",
font=("Courier", 14, "bold"))
printer.home()
turtle.tracer(True)
turtle.ontimer(Tick, 100)
def main():
turtle.tracer(False)
Init()
SetupClock(160)
turtle.tracer(True)
Tick()
turtle.mainloop()
if __name__ == "__main__":
main()