【案例】什么?idle 中竟然有内置 turtle 样例?(two_canvases)

文章目录

    • 案例介绍
    • 准备工作
    • 细节设计
      • 如何做到使用两只小乌龟在同一画布的不同区域同时进行绘制?
      • 如何做到让两个乌龟同时运动?
    • 代码汇总
    • 运行结果
    • 后记

案例介绍

今天我们继续来看 Python 内置的 turtle 案例,这次的案例比较简单,主要是在大画布上建立了两个小画布,然后分别有两个小乌龟一起画画。

准备工作

无需安装额外的库,只需要在 Python 内置的 idle 中找到对应的 turtle 样例即可。

细节设计

如何做到使用两只小乌龟在同一画布的不同区域同时进行绘制?

核心在于下面的代码。

cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff") # 创建画布
s1 = TurtleScreen(cv1) # 将 turtle 运动区域和画布绑定
p = RawTurtle(s1) # 将 turtle 和 运动区域绑定

如何做到让两个乌龟同时运动?

核心在于下面的代码,其中 p 和 q 分别表示了两只小乌龟,二者构成了一个可迭代对象的形式,由循环进行管理二者的动作行为。

for i in range(5):
    for t in p, q:
        t.fd(50) # 前进
        t.lt(72)

代码汇总

"""turtledemo.two_canvases

Use TurtleScreen and RawTurtle to draw on two
distinct canvases in a separate windows. The
new window must be separately closed in
addition to pressing the STOP button.
"""

from turtle import TurtleScreen, RawTurtle, TK

def main():
    root = TK.Tk()
    cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
    cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee")
    cv1.pack()
    cv2.pack()

    s1 = TurtleScreen(cv1)
    s1.bgcolor(0.85, 0.85, 1)
    s2 = TurtleScreen(cv2)
    s2.bgcolor(1, 0.85, 0.85)

    p = RawTurtle(s1)
    q = RawTurtle(s2)

    p.color("red", (1, 0.85, 0.85))
    p.width(3)
    q.color("blue", (0.85, 0.85, 1))
    q.width(3)

    for t in p,q:
        t.shape("turtle")
        t.lt(36) # 左转 angle=36 个单位

    q.lt(180)

    for t in p, q:
        t.begin_fill()
    for i in range(5):
        for t in p, q:
            t.fd(50) # 前进
            t.lt(72)
    for t in p,q:
        t.end_fill()
        t.lt(54)
        t.pu() # 抬起画笔
        t.bk(50) # 向后

    return "EVENTLOOP"


if __name__ == '__main__':
    main()
    TK.mainloop()  # keep window open until user closes it

运行结果

【案例】什么?idle 中竟然有内置 turtle 样例?(two_canvases)_第1张图片
【案例】什么?idle 中竟然有内置 turtle 样例?(two_canvases)_第2张图片

后记

以上就是我们今天的内容,下期我们将再学习别的有趣的 turtle 案例。

你可能感兴趣的:(#,Python,案例)