详解Python+Turtle绘制奥运标志的实现

 更新时间:2022年02月10日 10:10:16   作者:梦想画家  
turtle库是Python标准库之一,是入门级的图形绘制函数库。本文就将利用turtle库绘制一个奥运标志—奥运五环,感兴趣的可以学习一下

最近了解了Python Turtle,非常简单有趣。为了培养小朋友兴趣,写个turtle画奥运标志程序。

1. 画圆

turtle属于内置包,无需安装。只要导入即可以画图,下面先写几行代码画圆。

import turtle
 
t = turtle.Pen()
t.circle(50)
t.getscreen()._root.mainloop()

导入turtle之后,创建Pen画笔t,避免后续代码。circle方法是画圆,最后是消息循环,让程序等待可以看到画图结果。

2. 画奥运标识

除了画圆方法,还有几个方法需要了解。

setposition # 设置位置,画布的中心位置是坐标0位置

penup() # 抬起笔,移动时不画。

pendown() # 落笔,开始画

请看下面代码,很容易理解:

import turtle

t = turtle.Pen()
t.circle(50)

t.penup()
t.setposition(-120, 0)
t.pendown()
t.circle(50)

t.penup()
t.setposition(60, 60)
t.pendown()
t.circle(50)

t.penup()
t.setposition(-60, 60)
t.pendown()
t.circle(50)

t.penup()
t.setposition(-180, 60)
t.pendown()
t.circle(50)

t.getscreen()._root.mainloop()

仅通过移动坐标就能达到目的,但这个代码不够精简,需要重构。

3. 重构代码

每次画圆,变化部分只有坐标,这里把坐标和半径抽取为参数,定义drawCircle方法,然后定义每个圆起始坐标并针对每个坐标调用drawCircle方法即可。请看代码:

import turtle

class DrawAoYun(turtle.Turtle):
    """Draw Olympics logo"""

    def __init__(self):
        """DrawAoYun Constructor"""
        turtle.Turtle.__init__(self, shape="turtle")

    def drawCircle(self, x, y, radius=50):
        """
        Moves the turtle to the correct position and draws a circle
        """
        self.penup()
        self.setposition(x, y)
        self.pendown()
        self.circle(radius)

    def drawOlympicSymbol(self):
        """
        Iterates over a set of positions to draw the Olympics logo
        """
        positions = [(0, 0), (-120, 0), (60, 60), (-60, 60), (-180, 60)]
        for pos in positions:
            self.drawCircle(pos[0], pos[1])


if __name__ == "__main__":
    t = DrawAoYun()
    t.drawOlympicSymbol()

    turtle.getscreen()._root.mainloop()

这里定义类,继承turtle.Turtle,构造函数中调用父类__init__进行初始化,并设置画笔为乌龟样式。drawCircle方法定义画圆过程,位置和半径为参数,半径默认为50。drawOlympicSymbol方法先定义5个坐标列表,然后迭代调用drawCircle画圆,即完成了画奥运标识。

4. 美化标识

你可能觉得标识有点单调,没有颜色。我需要加上蓝色、黑色、红色和下面黄色和绿色,也要把画笔加粗点,最后在画上北京2008的文字。

import turtle

class DrawAoYun(turtle.Turtle):
    """Draw Olympics logo"""

    def __init__(self):
        """DrawAoYun Constructor"""
        turtle.Turtle.__init__(self, shape="turtle")
        self.width(5)

    def drawCircle(self, x, y, color,radius=50):
        """
        Moves the turtle to the correct position and draws a circle
        """
        self.penup()
        self.setposition(x, y)
        self.pendown()

        self.color(color)
        self.circle(radius)

    def drawOlympicSymbol(self):
        """
        Iterates over a set of positions to draw the Olympics logo
        """
        positions = [(0, 0, "green"), (-120, 0, "yellow"), (60, 60, "red"), (-60, 60, "black"), (-180, 60, "blue")]
        for x, y, color in positions:
            self.drawCircle(x, y, color)

    def drawText(self):
        """
        Draw text to the screen
        """
        self.penup()
        self.setposition(-120, 180)
        self.pendown()
        self.color("black")
        self.width(1)
        self.write("Beijing 2008", font=("Arial", 16, "bold"))


if __name__ == "__main__":
    t = DrawAoYun()
    t.drawOlympicSymbol()
    t.drawText()

    turtle.getscreen()._root.mainloop()

构造函数中通过width方法设置为5。drawCircle方法增加颜色参数,每次画之前使用self.color(color)设置颜色。drawOlympicSymbol方法中给每个坐标增加颜色元素。

drawText方法通过write方法画文字,其他代码基本一样。

5. 总结

turtle非常简单吧,如果需要更深入了解或想画一些更漂亮、复杂的图形,参考官方文档。

以上就是详解Python+Turtle绘制奥运标志的实现的详细内容,更多关于Python Turtle奥运标志的资料请关注脚本之家其它相关文章!

相关文章

  • Python中尝试多线程编程的一个简明例子

    Python中尝试多线程编程的一个简明例子

    这篇文章主要介绍了Python中尝试多线程编程的一个简明例子,由于GIL的存在,Python中的多线程编程一个是热点和难点问题,需要的朋友可以参考下
    2015-04-04
  • 详解Django中CBV(Class Base Views)模型源码分析

    详解Django中CBV(Class Base Views)模型源码分析

    这篇文章主要介绍了详解Django中CBV(Class Base Views)模型源码分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Python PyWebIO实现网页版数据查询器

    Python PyWebIO实现网页版数据查询器

    PyWebIO提供了一系列命令式的交互函数来在浏览器上获取用户输入和进行输出,将浏览器变成了一个“富文本终端”,可以用于构建简单的Web应用或基于浏览器的GUI应用。本文将利用PyWebIO制作一个网页版的数据查询器,感兴趣的可以学习一下
    2021-12-12
  • Pytorch实现tensor序列化和并行化的示例详解

    Pytorch实现tensor序列化和并行化的示例详解

    这篇文章主要介绍了Pytorch实现tensor序列化和并行化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,感兴趣的同学们下面随着小编来一起学习学习吧
    2023-12-12
  • 详解用Pytest+Allure生成漂亮的HTML图形化测试报告

    详解用Pytest+Allure生成漂亮的HTML图形化测试报告

    这篇文章主要介绍了详解用Pytest+Allure生成漂亮的HTML图形化测试报告,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • python利用appium实现手机APP自动化的示例

    python利用appium实现手机APP自动化的示例

    这篇文章主要介绍了python利用appium实现手机APP自动化的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python神经网络之批量学习tf.train.batch函数示例

    python神经网络之批量学习tf.train.batch函数示例

    这篇文章主要为大家介绍了python神经网络之批量学习tf.train.batch函数示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python 爬虫图片简单实现

    Python 爬虫图片简单实现

    这篇文章主要介绍了Python 爬虫图片简单实现的相关资料,需要的朋友可以参考下
    2017-06-06
  • 深入讲解Python中的迭代器和生成器

    深入讲解Python中的迭代器和生成器

    这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下
    2015-10-10
  • Python箱型图绘制与特征值获取过程解析

    Python箱型图绘制与特征值获取过程解析

    这篇文章主要介绍了Python箱型图绘制与特征值获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论