700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python Turtle绘制炫酷漂亮图案(turtledemo模块实例)

Python Turtle绘制炫酷漂亮图案(turtledemo模块实例)

时间:2021-06-06 01:42:42

相关推荐

Python Turtle绘制炫酷漂亮图案(turtledemo模块实例)

Python库中的turtledemo模块,里面有非常多的turtle实例。

rosette.py

"""turtle-example-suite:tdemo_wikipedia3.pyThis example isinspired by the Wikipedia article on turtlegraphics. (See example wikipedia1 for URLs)First we create (ne-1) (i.e. 35 in thisexample) copies of our first turtle p.Then we let them perform their steps inparallel.Followed by a complete undo()."""from turtle import Screen, Turtle, mainloopfrom time import perf_counter as clock, sleepdef mn_eck(p, ne,sz):turtlelist = [p]#create ne-1 additional turtlesfor i in range(1,ne):q = p.clone()q.rt(360.0/ne)turtlelist.append(q)p = qfor i in range(ne):c = abs(ne/2.0-i)/(ne*.7)# let those ne turtles make a step# in parallel:for t in turtlelist:t.rt(360./ne)t.pencolor(1-c,0,c)t.fd(sz)def main():s = Screen()s.bgcolor("black")p=Turtle()p.speed(0)p.hideturtle()p.pencolor("red")p.pensize(3)s.tracer(36,0)at = clock()mn_eck(p, 36, 19)et = clock()z1 = et-atsleep(1)at = clock()while any(t.undobufferentries() for t in s.turtles()):for t in s.turtles():t.undo()et = clock()return "runtime: %.3f sec" % (z1+et-at)if __name__ == '__main__':msg = main()print(msg)mainloop()

bytedesign.py

#!/usr/bin/env python3"""turtle-example-suite:tdemo_bytedesign.pyAn example adapted from the example-suiteof PythonCard's turtle graphics.It's based on an article in BYTE magazineProblem Solving with Logo: Using TurtleGraphics to Redraw a DesignNovember 1982, p. 118 - 134-------------------------------------------Due to the statementt.delay(0)in line 152, which sets the animation delayto 0, this animation runs in "line per line"mode as fast as possible."""from turtle import Turtle, mainloopfrom time import perf_counter as clock# wrapper for any additional drawing routines# that need to know about each otherclass Designer(Turtle):def design(self, homePos, scale):self.up()for i in range(5):self.forward(64.65 * scale)self.down()self.wheel(self.position(), scale)self.up()self.backward(64.65 * scale)self.right(72)self.up()self.goto(homePos)self.right(36)self.forward(24.5 * scale)self.right(198)self.down()self.centerpiece(46 * scale, 143.4, scale)self.getscreen().tracer(True)def wheel(self, initpos, scale):self.right(54)for i in range(4):self.pentpiece(initpos, scale)self.down()self.left(36)for i in range(5):self.tripiece(initpos, scale)self.left(36)for i in range(5):self.down()self.right(72)self.forward(28 * scale)self.up()self.backward(28 * scale)self.left(54)self.getscreen().update()def tripiece(self, initpos, scale):oldh = self.heading()self.down()self.backward(2.5 * scale)self.tripolyr(31.5 * scale, scale)self.up()self.goto(initpos)self.setheading(oldh)self.down()self.backward(2.5 * scale)self.tripolyl(31.5 * scale, scale)self.up()self.goto(initpos)self.setheading(oldh)self.left(72)self.getscreen().update()def pentpiece(self, initpos, scale):oldh = self.heading()self.up()self.forward(29 * scale)self.down()for i in range(5):self.forward(18 * scale)self.right(72)self.pentr(18 * scale, 75, scale)self.up()self.goto(initpos)self.setheading(oldh)self.forward(29 * scale)self.down()for i in range(5):self.forward(18 * scale)self.right(72)self.pentl(18 * scale, 75, scale)self.up()self.goto(initpos)self.setheading(oldh)self.left(72)self.getscreen().update()def pentl(self, side, ang, scale):if side < (2 * scale): returnself.forward(side)self.left(ang)self.pentl(side - (.38 * scale), ang, scale)def pentr(self, side, ang, scale):if side < (2 * scale): returnself.forward(side)self.right(ang)self.pentr(side - (.38 * scale), ang, scale)def tripolyr(self, side, scale):if side < (4 * scale): returnself.forward(side)self.right(111)self.forward(side / 1.78)self.right(111)self.forward(side / 1.3)self.right(146)self.tripolyr(side * .75, scale)def tripolyl(self, side, scale):if side < (4 * scale): returnself.forward(side)self.left(111)self.forward(side / 1.78)self.left(111)self.forward(side / 1.3)self.left(146)self.tripolyl(side * .75, scale)def centerpiece(self, s, a, scale):self.forward(s); self.left(a)if s < (7.5 * scale):returnself.centerpiece(s - (1.2 * scale), a, scale)def main():t = Designer()t.speed(0)t.hideturtle()t.getscreen().delay(0)t.getscreen().tracer(0)at = clock()t.design(t.position(), 2)et = clock()return "runtime: %.2f sec." % (et-at)if __name__ == '__main__':msg = main()print(msg)mainloop()

clock.py:实现turtle做的时钟效果

#!/usr/bin/env python3# -*- coding: cp1252 -*-""" turtle-example-suite:tdemo_clock.pyEnhanced clock-program, showing dateand time------------------------------------Press STOP to exit the program!------------------------------------"""from turtle import *from datetime import datetimedef jump(distanz, winkel=0):penup()right(winkel)forward(distanz)left(winkel)pendown()def hand(laenge, spitze):fd(laenge*1.15)rt(90)fd(spitze/2.0)lt(120)fd(spitze)lt(120)fd(spitze)lt(120)fd(spitze/2.0)def make_hand_shape(name, laenge, spitze):reset()jump(-laenge*0.15)begin_poly()hand(laenge, spitze)end_poly()hand_form = get_poly()register_shape(name, hand_form)def clockface(radius):reset()pensize(7)for i in range(60):jump(radius)if i % 5 == 0:fd(25)jump(-radius-25)else:dot(3)jump(-radius)rt(6)def setup():global second_hand, minute_hand, hour_hand, writermode("logo")make_hand_shape("second_hand", 125, 25)make_hand_shape("minute_hand", 130, 25)make_hand_shape("hour_hand", 90, 25)clockface(160)second_hand = Turtle()second_hand.shape("second_hand")second_hand.color("gray20", "gray80")minute_hand = Turtle()minute_hand.shape("minute_hand")minute_hand.color("blue1", "red1")hour_hand = Turtle()hour_hand.shape("hour_hand")hour_hand.color("blue3", "red3")for hand in second_hand, minute_hand, hour_hand:hand.resizemode("user")hand.shapesize(1, 1, 3)hand.speed(0)ht()writer = Turtle()#writer.mode("logo")writer.ht()writer.pu()writer.bk(85)def wochentag(t):wochentag = ["Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday", "Sunday"]return wochentag[t.weekday()]def datum(z):monat = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June","July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."]j = z.yearm = monat[z.month - 1]t = z.dayreturn "%s %d %d" % (m, t, j)def tick():t = datetime.today()sekunde = t.second + t.microsecond*0.000001minute = t.minute + sekunde/60.0stunde = t.hour + minute/60.0try:tracer(False) # Terminator can occur herewriter.clear()writer.home()writer.forward(65)writer.write(wochentag(t),align="center", font=("Courier", 14, "bold"))writer.back(150)writer.write(datum(t),align="center", font=("Courier", 14, "bold"))writer.forward(85)tracer(True)second_hand.setheading(6*sekunde) # or hereminute_hand.setheading(6*minute)hour_hand.setheading(30*stunde)tracer(True)ontimer(tick, 100)except Terminator:pass # turtledemo user pressed STOPdef main():tracer(False)setup()tracer(True)tick()return "EVENTLOOP"if __name__ == "__main__":mode("logo")msg = main()print(msg)mainloop()

关于此模块的更多详情,可以参考Python turtledemo官方文档

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。