• 画一个心送给心爱的小姐姐,Python绘图库Turtle


    Python绘图库Turtle

    Turtle介绍

    Turtle是Python内嵌的绘制线、圆以及其他形状(包括文本)的图形模块。

    一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对象,然后,可以调用Turtle对象的各种方法完成不同的操作。

    当创建一个Turtle对象时,它的位置被设定在(0,0)处——窗口的中心,而且它的方向被设置为向右。Turtle模块用笔来绘制图形,就像在现实的纸上画图写字。当移动笔的时候就会按着移动方向画线。

    海龟图坐标详解

    海龟图画图定位采用坐标系,坐标系的(0,0)位置在图纸的中间点。其他的跟我们在数学中学的坐标是一样的,分成四个象限。

    如下图所示:

     

    Turtle基础

    1.    画布

    设置画布大小与背景颜色

    方法1:

    turtle.screensize(canvwidth=None, canvheight=None, bg=None)

    参数:分别为画布的宽(单位像素), 高, 背景颜色。

    方法2:

    turtle.setup(width=0.5, height=0.75, startx=None, starty=None)

    参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例,(startx, starty): 这一坐标表示矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心

    2.    画笔

    画笔设置:

    1. 画笔宽度 turtle.pensize(int)  参数是一个整形
    2. 画笔颜色turtle.pencolor("black") 参数可以是字符串如"green", "red",也可以是RGB 3元组
    3. 画笔速度 turtle.speed(speed) 设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。

    3.    绘图命令

    海龟绘图命令可以划分为3种:一种为画笔运动命令,一种为画笔控制命令,还有一种是全局控制命令。

    画笔运动命令:

    命令

    说明

    turtle.forward(distance)/fd()

    向当前画笔方向移动distance像素长度

    turtle.backward(distance)

    向当前画笔相反方向移动distance像素长度

    turtle.right(degree)

    顺时针移动degree°

    turtle.left(degree)

    逆时针移动degree°

    turtle.pendown()

    移动时绘制图形,缺省时也为绘制

    turtle.goto(x,y)

    将画笔移动到坐标为x,y的位置

    turtle.penup()

    提起笔移动,不绘制图形,用于另起一个地方绘制

    turtle.circle()

    画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

    setx( )

    将当前x轴移动到指定位置

    sety( )

    将当前y轴移动到指定位置

    setheading(angle)/seth(angle)

    设置当前朝向为angle角度

    home()

    设置当前画笔位置为原点,朝向东。

    dot(r)

    绘制一个指定直径和颜色的圆点

     

     

    画笔控制命令:

    命令

    说明

    turtle.fillcolor(colorstring)

    绘制图形的填充颜色

    turtle.color(color1, color2)

    同时设置pencolor=color1, fillcolor=color2

    turtle.filling()

    返回当前是否在填充状态

    turtle.begin_fill()

    准备开始填充图形

    turtle.end_fill()

    填充完成

    turtle.hideturtle()

    隐藏画笔的turtle形状

    turtle.showturtle()

    显示画笔的turtle形状

    turtle.begin_poly()

    记录画笔的位置

    turtle.get_poly()

    获取画笔的位置

    全局控制命令:

    命令

    说明

    turtle.clear()

    清空turtle窗口,但是turtle的位置和状态不会改变

    turtle.reset()

    清空窗口,重置turtle状态为起始状态

    turtle.undo()

    撤销上一个turtle动作

    turtle.isvisible()

    返回当前turtle是否可见

    stamp()

    复制当前图形

    turtle.write(s ,font=("font-name",font_size,"font_type")])

    写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项

    turtle.mainloop()

    绘制完成后不关闭窗口

     

    案例:五角星

     

    五角星画法:

    五角星每一个内角为36°,假如以海龟所在位置为起点先画一条横线,那么画到第一个角的时候需要拐弯可以使用 turtle.right()顺时针,turtle.left() 逆时针旋转画笔

     

    如果使用顺时针旋转  180°-36°=144°

    如果使用逆时针旋转  180°+36°=216°

     

    五个角即循环五次即可

     

    import turtle

     

    turtle.pensize(3) # 画笔大小

    turtle.pencolor("yellow") # 画笔颜色

    turtle.fillcolor("red") # 填充颜色

    turtle.begin_fill() # 开始填充

    for _ in range(5): # 五角星循环五次

    turtle.forward(200) # 五角星的边长200像素

    turtle.left(144) # 画笔旋转角度

    turtle.end_fill() # 填充完成

     

    turtle.mainloop() # 不关闭窗口

     

     

     

     

    案例:爱心

     

    说明:桃心画法

     

     

     

     

    def draw_heart(r, angle=45):
        """
       
    :param r: 桃心圆的半径
       
    :param angle: 起始画笔角度
       
    :return: 返回桃心底部尖点坐标
        """
       
    turtle.begin_fill()  # 开始填充
       
    turtle.seth(0)
        turtle.seth(angle)  # 设置画笔方向
       
    turtle.circle(-r, 180)  # 逆时针画半圆
       
    turtle.fd(2 * r)  # 向前移动
       
    turtle.begin_poly()  # 记录画笔的位置
       
    x, y = turtle.get_poly()[0]  # 获取画笔的位置
       
    turtle.right(90)  # 逆时针旋转画笔
       
    turtle.fd(2 * r)  # 向前移动
       
    turtle.circle(-r, 180)
        turtle.end_fill()  # 填充结束
       
    return x, y

    完整代码查看附件

     

     

     

    import turtle

     

    turtle.setup(1200, 600)  # 窗口大小

     

    # 画心

     

     

    turtle.color("black", "red")

    turtle.pensize(2)

    turtle.speed(10)

    turtle.up()  # 提起画笔

    turtle.goto(0, 50)

     

    turtle.down()

     

     

    def draw_heart(r, angle=45):

        """

        :param r: 桃心圆的半径

        :param angle: 起始画笔角度

        :return: 返回桃心底部尖点坐标

        """

        turtle.begin_fill()  # 开始填充

        turtle.seth(0)

        turtle.seth(angle)  # 设置画笔方向

        turtle.circle(-r, 180)  # 逆时针画半圆

        turtle.fd(2 * r)  # 向前移动

        turtle.begin_poly()  # 记录画笔的位置

        x, y = turtle.get_poly()[0]  # 获取画笔的位置

        turtle.right(90)  # 逆时针旋转画笔

        turtle.fd(2 * r)  # 向前移动

        turtle.circle(-r, 180)

        turtle.end_fill()  # 填充结束

        return x, y

     

     

    # 画桃心

    x_y = []

    start_x = 0

    for _ in range(4):

        turtle.goto(start_x, 50)

        turtle.down()  # 放下笔

        x_y.append(draw_heart(8))

        start_x += 50

        turtle.up()  # 提起画笔

     

     

    # 画叶子

    def draw_flower(x, y):

        """

        画桃心下的花

        :param x: 桃心尖底的x

        :param y: 桃心尖底的y

        :return:

        """

        turtle.up()

        turtle.goto(x, y)

        turtle.seth(0)  # 恢复画笔向右

        turtle.seth(-90)

        turtle.down()

        turtle.fd(60)

        turtle.goto(x, y)

        turtle.right(60)

        turtle.fd(20)

        turtle.left(90)

        turtle.fd(10)

        turtle.left(120)

        turtle.fd(20)

        turtle.up()

        turtle.goto(x, y)

        turtle.seth(0)  # 恢复画笔向右

        turtle.seth(-115)

        turtle.down()

        turtle.fd(25)

        turtle.up()

        turtle.goto(x, y)

        turtle.seth(0)  # 恢复画笔向右

        turtle.seth(-10)

        turtle.down()

        turtle.fd(20)

        turtle.right(90)

        turtle.fd(8)

        turtle.right(120)

        turtle.fd(20)

        turtle.goto(x, y)

        turtle.seth(-60)

        turtle.fd(20)

        turtle.up()

     

     

    for x, y in x_y:

        draw_flower(x, y)

     

    # 画小人物

    turtle.up()

    turtle.goto(-200, -50)

    turtle.down()

    turtle.seth(0)  # 恢复画笔向右,好控制方向

    turtle.seth(45)

    turtle.fd(40)

    turtle.begin_poly()  # 记录画笔的位置,脚叉的位置

    x, y = turtle.get_poly()[0]  # 获取画笔的位置

    turtle.right(90)

    turtle.fd(35)

    turtle.goto(x, y)

    turtle.left(135)

    turtle.fd(90)

    turtle.seth(0)

    turtle.circle(30)  # 画圆

    turtle.goto(x, y + 60)  # 手的位置

    turtle.fd(40)

    turtle.circle(30, 70)  # 画圆,拿花手的弧度

    turtle.seth(0)

    turtle.up()

    turtle.goto(x, y + 50)  # 手的位置

    turtle.down()

    turtle.fd(50)

    turtle.begin_poly()  # 记录手的位置等下画花需要用

    f_x, f_y = turtle.get_poly()[0]

     

    # 眼睛

    turtle.up()

    turtle.goto(x - 15, y + 120)  # 眼睛的位置

    turtle.down()

    turtle.pensize(4)

    turtle.seth(45)

    turtle.circle(-10, 70)  # 画圆弧,拿花手的弧度

    turtle.dot(10)  # 眼睛画圆

    turtle.up()

     

    turtle.goto(x + 10, y + 120)  # 眼睛的位置

    turtle.down()

    turtle.pensize(4)

    turtle.seth(45)

    turtle.circle(-10, 70)  # 画圆弧,拿花手的弧度

    turtle.dot(10)  # 眼睛   画圆

    turtle.up()

     

    # 嘴巴

    turtle.goto(x, y + 105)  # 眼睛的位置

    turtle.down()

    turtle.circle(10, 70)  # 画圆弧,拿花手的弧度

     

    # 画里拿的花叶子部分

    turtle.pensize(3)  # 将画笔大小

    turtle.up()

    turtle.goto(f_x, f_y)  # 手的位置

    turtle.left(20)

    turtle.down()

    turtle.fd(60)

    turtle.pensize(2)  # 将画笔调小

    turtle.begin_poly()  # 记录手的位置等下画花需要用

    x, y = turtle.get_poly()[0]

    turtle.backward(80)

    turtle.up()

    turtle.goto(x, y)

    turtle.down()

    turtle.right(90)

    turtle.fd(20)

    turtle.right(90)

    turtle.fd(8)

    turtle.right(120)

    turtle.fd(25)

    turtle.right(200)

    turtle.fd(25)

    turtle.up()

    turtle.goto(x, y)

    turtle.down()

    turtle.right(60)

    turtle.fd(25)

    turtle.goto(x, y)

    turtle.right(40)

    turtle.fd(25)

    turtle.left(90)

    turtle.fd(8)

    turtle.left(110)

    turtle.fd(25)

     

    turtle.goto(f_x + 34, f_y + 75)

    draw_heart(8, angle=20)  # 手里拿的桃心

     

    # 写文字

    turtle.up()

    turtle.goto(150, 200)

    turtle.pencolor("PINK")  # 画笔颜色

    turtle.write("TO: 所有同学", font=("方正舒体", 30, 'normal'))

    turtle.goto(180,140)

    turtle.write("送给棒棒的你", font=("方正舒体", 30, 'normal'))

     

    turtle.hideturtle()

    turtle.mainloop()

     

    喜欢Python的同学扫码加我哟!!!!!

     

  • 相关阅读:
    【HDOJ】4347 The Closest M Points
    【HDOJ】4341 Gold miner
    【HDOJ】4333 Revolving Digits
    【HDOJ】4336 Card Collector
    【HDOJ】4328 Cut the cake
    【HDOJ】4322 Candy
    【HDOJ】4317 Unfair Nim
    串口接收线程退出与优先级问题
    EVC编程与调试过程出现的问题
    Windows CE创建桌面快捷方式
  • 原文地址:https://www.cnblogs.com/huangguifeng/p/11816423.html
Copyright © 2020-2023  润新知