虽然这届奥运遇到重重阻碍,疫情影响而延后,延后了要举办民众反对,再然后彩排后还爆出xq案件,更有小道爆出黑幕。这些种种我们就忽略掉吧~

截止本文发表,我们看看战况:

弘扬奥运精神,今天我们用49行写歌奥运五环~

本文效果预览:

奥林匹克标志

奥林匹克 标志 (Olympic Logo /Symbole Olympique/Olympic Rings)是由皮埃尔·德·顾拜旦先生于1913年构思设计的,是由《奥林匹克宪章》确定的,也被称为奥运五环标志,它是世界范围内最为人们广泛认知的奥林匹克运动会标志。它由5个奥林匹克环套接组成,有蓝、黄、黑、绿、红5种颜色。环从左到右互相套接,上面是蓝、黑、红环,下面是是黄、绿环。整个造形为一个底部小的规则梯形。

初始化

我们使用的是PyQt5

先搭个框架:

import sys
from PyQt5.QtGui import QPainter, QPen, QBrush
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt# 定义Olympic类
class Olympic(QWidget):def __init__(self):# 父类初始化super().__init__()# 设置宽高self.setGeometry(300, 300, 550, 600)self.setWindowTitle('奥运五环')# 初始化变量self.isBlue = Falseself.isYellow = Falseself.isBlack = Falseself.isGreen = Falseself.isRed = Falseself.brushWidth = 10self.show()    # 定义粉刷事件def paintEvent(self, event):qp = QPainter()qp.begin(self)if __name__ == '__main__':  app = QApplication(sys.argv)ex = Olympic()app.exec_()

开始

先粉刷第一个蓝色圈圈

 # 定义粉刷事件def paintEvent(self, event):qp = QPainter()qp.begin(self)bluePen = QPen(QBrush(Qt.blue), self.brushWidth)qp.setPen(bluePen)qp.drawEllipse(99, 150, 100, 100)qp.end()

依次画出其他颜色的圈圈

 # 定义粉刷事件def paintEvent(self, event):qp = QPainter()qp.begin(self)bluePen = QPen(QBrush(Qt.blue), self.brushWidth)yellowPen = QPen(QBrush(Qt.yellow), self.brushWidth)blackPen = QPen(QBrush(Qt.black), self.brushWidth)greenPen = QPen(QBrush(Qt.green), self.brushWidth)redPen = QPen(QBrush(Qt.red), self.brushWidth)qp.setPen(bluePen)qp.drawEllipse(99, 150, 100, 100)qp.setPen(yellowPen)qp.drawEllipse(161.5, 200, 100, 100)qp.setPen(blackPen)qp.drawEllipse(224, 150, 100, 100)qp.setPen(greenPen)qp.drawEllipse(286.5, 200, 100, 100)qp.setPen(redPen)qp.drawEllipse(349, 150, 100, 100)qp.end()

画完是这样婶的~

优化环环相扣

你以为画完了?

nono~

奥运五环时这样婶的~

伦家是环环相扣的

所以我们要处理下,先画个试试:

 # 画个圆弧覆盖下qp.setPen(bluePen)qp.drawArc(99, 150, 100, 100, 345*16, 30*16)

看下效果

黄色和蓝色是对了,我们再用同样的方式处理下

 # 画个圆弧覆盖下qp.setPen(bluePen)qp.drawArc(99, 150, 100, 100, 345*16, 30*16)qp.setPen(yellowPen)qp.drawArc(161.5, 200, 100, 100, 70*16, 15*16)qp.setPen(greenPen)qp.drawArc(286.5, 200, 100, 100, 160*16, 30*16)qp.setPen(blackPen)qp.drawArc(224, 150, 100, 100, 345*16, 30*16)qp.setPen(greenPen)qp.drawArc(286.5, 200, 100, 100, 70*16, 15*16)qp.end()

看下效果

这样我们的奥运五坏就画完了~

完整代码:

import sys
from PyQt5.QtGui import QPainter, QPen, QBrush
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt# 定义Olympic类
class Olympic(QWidget):def __init__(self):# 父类初始化super().__init__()# 设置宽高self.setGeometry(300, 300, 550, 600)self.setWindowTitle('奥运五环')# 初始化变量self.isBlue = Falseself.isYellow = Falseself.isBlack = Falseself.isGreen = Falseself.isRed = Falseself.brushWidth = 10self.show()    # 定义粉刷事件def paintEvent(self, event):qp = QPainter()qp.begin(self)bluePen = QPen(QBrush(Qt.blue), self.brushWidth)yellowPen = QPen(QBrush(Qt.yellow), self.brushWidth)blackPen = QPen(QBrush(Qt.black), self.brushWidth)greenPen = QPen(QBrush(Qt.green), self.brushWidth)redPen = QPen(QBrush(Qt.red), self.brushWidth)qp.setPen(bluePen)qp.drawEllipse(99, 150, 100, 100)qp.setPen(yellowPen)qp.drawEllipse(161.5, 200, 100, 100)qp.setPen(blackPen)qp.drawEllipse(224, 150, 100, 100)qp.setPen(greenPen)qp.drawEllipse(286.5, 200, 100, 100)qp.setPen(redPen)qp.drawEllipse(349, 150, 100, 100)# 画个圆弧覆盖下qp.setPen(bluePen)qp.drawArc(99, 150, 100, 100, 345*16, 30*16)qp.setPen(yellowPen)qp.drawArc(161.5, 200, 100, 100, 70*16, 15*16)qp.setPen(greenPen)qp.drawArc(286.5, 200, 100, 100, 160*16, 30*16)qp.setPen(blackPen)qp.drawArc(224, 150, 100, 100, 345*16, 30*16)qp.setPen(greenPen)qp.drawArc(286.5, 200, 100, 100, 70*16, 15*16)qp.end()if __name__ == '__main__':  app = QApplication(sys.argv)ex = Olympic()app.exec_()

去掉注释和空行,49行

不过这样好像太简单了,我们加个鼠标点击圈圈来取色,如果两个颜色的圈圈交叉我们要取出两种颜色,预备备,开始~

取色

Olympic类添加定义鼠标点击事件

 # 定义鼠标点击事件def mousePressEvent(self, event):self.x = event.x()self.y = event.y()# 根据鼠标位置计算是否点击在圈圈内def point_is_in_the_circle(origin_x, origin_y, radius, x, y):d = ((x - origin_x)**2 + (y - origin_y)**2)**(1/2)if (d < radius):  return Truereturn False self.isBlue = False  if(point_is_in_the_circle(149, 200, 50, self.x, self.y)): self.isBlue = True# 更新下视图self.update()

paintEvent添加

 if((self.isBlue)):if(self.isBlue):qp.fillRect(100, 450, 350, 100, Qt.blue)

看下效果

补气所有取色效果

mousePressEvent方法

 # 定义鼠标点击事件def mousePressEvent(self, event):self.x = event.x()self.y = event.y()# 根据鼠标位置计算是否点击在圈圈内def point_is_in_the_circle(origin_x, origin_y, radius, x, y):d = ((x - origin_x)**2 + (y - origin_y)**2)**(1/2)if (d < radius):  return Truereturn False self.isBlue = Falseself.isYellow = Falseself.isBlack = Falseself.isGreen = Falseself.isRed = False    if(point_is_in_the_circle(149, 200, 50, self.x, self.y)): self.isBlue = Trueif(point_is_in_the_circle(211.5, 250, 50, self.x, self.y)):self.isYellow = Trueif(point_is_in_the_circle(274, 200, 50, self.x, self.y)):self.isBlack = Trueif(point_is_in_the_circle(336.5, 250, 50, self.x, self.y)):self.isGreen = Trueif(point_is_in_the_circle(399, 200, 50, self.x, self.y)):self.isRed = True# 更新下视图self.update()

paintEvent方法,需要注意的是俩个圈圈并集的把两种颜色都取出来,如下:

 if((self.isBlue) or (self.isYellow) or (self.isBlack) or (self.isGreen) or (self.isRed)):if(self.isBlue):qp.fillRect(100, 450, 350, 100, Qt.blue)if(self.isYellow):qp.fillRect(100, 450, 350, 100, Qt.yellow)if((self.isBlue) and (self.isYellow)):qp.fillRect(100, 450, 175, 100, Qt.blue)qp.fillRect(275, 450, 175, 100, Qt.yellow)if(self.isBlack):qp.fillRect(100, 450, 350, 100, Qt.black)if((self.isBlack) and (self.isYellow)):qp.fillRect(100, 450, 175, 100, Qt.yellow)qp.fillRect(275, 450, 175, 100, Qt.black)if(self.isGreen):qp.fillRect(100, 450, 350, 100, Qt.green)if((self.isBlack) and (self.isGreen)):qp.fillRect(100, 450, 175, 100, Qt.black)qp.fillRect(275, 450, 175, 100, Qt.green)if(self.isRed):qp.fillRect(100, 450, 350, 100, Qt.red)if((self.isGreen) and (self.isRed)):qp.fillRect(100, 450, 175, 100, Qt.green)qp.fillRect(275, 450, 175, 100, Qt.red)

修复bug

 # 修复 command+w 关闭窗口sys.exit(app.exec_())

最终效果

完整代码如下:

import sys
from PyQt5.QtGui import QPainter, QPen, QBrush
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt# 定义Olympic类
class Olympic(QWidget):def __init__(self):# 父类初始化super().__init__()# 设置宽高self.setGeometry(300, 300, 550, 600)self.setWindowTitle('奥运五环')# 初始化变量self.isBlue = Falseself.isYellow = Falseself.isBlack = Falseself.isGreen = Falseself.isRed = Falseself.brushWidth = 10self.show()   # 定义鼠标点击事件def mousePressEvent(self, event):self.x = event.x()self.y = event.y()# 根据鼠标位置计算是否点击在圈圈内def point_is_in_the_circle(origin_x, origin_y, radius, x, y):d = ((x - origin_x)**2 + (y - origin_y)**2)**(1/2)if (d < radius):  return Truereturn False self.isBlue = Falseself.isYellow = Falseself.isBlack = Falseself.isGreen = Falseself.isRed = False    if(point_is_in_the_circle(149, 200, 50, self.x, self.y)): self.isBlue = Trueif(point_is_in_the_circle(211.5, 250, 50, self.x, self.y)):self.isYellow = Trueif(point_is_in_the_circle(274, 200, 50, self.x, self.y)):self.isBlack = Trueif(point_is_in_the_circle(336.5, 250, 50, self.x, self.y)):self.isGreen = Trueif(point_is_in_the_circle(399, 200, 50, self.x, self.y)):self.isRed = True# 更新下视图self.update()# 定义粉刷事件def paintEvent(self, event):qp = QPainter()qp.begin(self)bluePen = QPen(QBrush(Qt.blue), self.brushWidth)yellowPen = QPen(QBrush(Qt.yellow), self.brushWidth)blackPen = QPen(QBrush(Qt.black), self.brushWidth)greenPen = QPen(QBrush(Qt.green), self.brushWidth)redPen = QPen(QBrush(Qt.red), self.brushWidth)qp.setPen(bluePen)qp.drawEllipse(99, 150, 100, 100)qp.setPen(yellowPen)qp.drawEllipse(161.5, 200, 100, 100)qp.setPen(blackPen)qp.drawEllipse(224, 150, 100, 100)qp.setPen(greenPen)qp.drawEllipse(286.5, 200, 100, 100)qp.setPen(redPen)qp.drawEllipse(349, 150, 100, 100)# 画个圆弧覆盖下qp.setPen(bluePen)qp.drawArc(99, 150, 100, 100, 345*16, 30*16)qp.setPen(yellowPen)qp.drawArc(161.5, 200, 100, 100, 70*16, 15*16)qp.setPen(greenPen)qp.drawArc(286.5, 200, 100, 100, 160*16, 30*16)qp.setPen(blackPen)qp.drawArc(224, 150, 100, 100, 345*16, 30*16)qp.setPen(greenPen)qp.drawArc(286.5, 200, 100, 100, 70*16, 15*16)if((self.isBlue) or (self.isYellow) or (self.isBlack) or (self.isGreen) or (self.isRed)):if(self.isBlue):qp.fillRect(100, 450, 350, 100, Qt.blue)if(self.isYellow):qp.fillRect(100, 450, 350, 100, Qt.yellow)if((self.isBlue) and (self.isYellow)):qp.fillRect(100, 450, 175, 100, Qt.blue)qp.fillRect(275, 450, 175, 100, Qt.yellow)if(self.isBlack):qp.fillRect(100, 450, 350, 100, Qt.black)if((self.isBlack) and (self.isYellow)):qp.fillRect(100, 450, 175, 100, Qt.yellow)qp.fillRect(275, 450, 175, 100, Qt.black)if(self.isGreen):qp.fillRect(100, 450, 350, 100, Qt.green)if((self.isBlack) and (self.isGreen)):qp.fillRect(100, 450, 175, 100, Qt.black)qp.fillRect(275, 450, 175, 100, Qt.green)if(self.isRed):qp.fillRect(100, 450, 350, 100, Qt.red)if((self.isGreen) and (self.isRed)):qp.fillRect(100, 450, 175, 100, Qt.green)qp.fillRect(275, 450, 175, 100, Qt.red)qp.end()if __name__ == '__main__':  app = QApplication(sys.argv)ex = Olympic()# 修复 command+w 关闭窗口sys.exit(app.exec_())

作业

用今天所学,实现如下每个圈圈相交部分有一点点白边:

弘扬奥运精神,我们49行画个奥运五环相关推荐

  1. Java~学习使用Robot类实现聊天轰炸器 和 在画图板画出奥运五环

    文章目录 Robot类指南 构造方法 使用的方法 实现聊天轰炸器 实现画图板画出奥运五环 Robot类指南 该类用于生成本机系统输入事件,用于测试自动化,自运行演示以及需要控制鼠标和键盘的其他应用程序 ...

  2. python_海龟绘图_画出奥运五环图---python工作笔记014

    然后我们再用海龟绘图去,画个奥运五环 去新建一个文件 首先引入turtle海龟绘图程序包

  3. 【许晓笛】49行代码就能发币?而且EOS连例子都给你了

    Daniel Larimer 在他的博客介绍了EOS新的智能合约架构(EOS团队的开发速度实在是太吓人,根本追不上).他给出了最简单的一个新币种的智能合约代码,仅有49行就能完成一个新币种的开发,一个 ...

  4. 拜师————python基础入门——守破离学习法,海龟绘图,画出奥运五环图,day3

    第六节课:任务6:006.简单错误如何处理_守破离学习法_程序员修炼手册 刚刚开始学习python,编程常常会出现一系列错误,建议采用一种学习方法来学习: 守 破 离 (这个是学习常识) 老师出的书: ...

  5. 港科夜闻|香港科技大学举办北京冬奥精神云分享会,借鉴成功经验延续奥运精神...

    关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1.香港科技大学举办北京冬奥精神云分享会,借鉴成功经验延续奥运精神.本次分享会的举办旨在与香港市民分享"胸怀大局.自信开放.迎难而上.追 ...

  6. 周建华:弘扬雷锋精神 我的志愿服务2022

    2022志愿服务在路上 12月5日是"国际志愿者日",志愿服务(Volunteer Service),也叫志愿工作,是指任何自愿贡献个人时间和精力,在不为物质报酬的前提下,为推动人 ...

  7. 弘扬雷锋精神:2019学雷锋手抄报

    如果你是一缕阳光,你是否照亮了一片黑暗?如果你是一滴水,你是否滋润了一寸土地?如果你是一粒粮食,你是否哺育了有用的生命?如果你是一颗最小的'螺丝钉',你是否永远的坚守岗位?"雷锋,就是这一缕 ...

  8. 分别画出奥运五环和四个矩形

    #1.画出奥运五环 import turtle #导入turtle模块 turtle.width('8') #设置画线的宽度 turtle.penup() #抬笔路径,画不出来 turtle.goto ...

  9. 五律《江南秋怀》江清行画里

    五律<江南秋怀>江清行画里,晓色隐长空.古道凝秋意,凉亭别蝶红.寻芳思月路,滴翠累梧桐.杳杳云垂晚,扁舟载梦匆. 七律/随笔幽幽桂雨小园香,白社秋临落叶凉.颜巷风梳芳草瑟,朱阑露滴翠痕黄. ...

最新文章

  1. 北风设计模式课程---单一职责原则
  2. 电脑有摄像头吗_知道ip地址就能入侵摄像头吗?
  3. 左右躲避障碍-神手ts版本
  4. java反射经典实例 Java Reflection Cookbook
  5. spring加载jar包中多个配置文件
  6. ubuntu16.04装机7:安装VScode
  7. symbian VC环境配置及其helloword详解
  8. matlab定积分如何使用,如何用matlab计算定积分.pdf
  9. 教你win7如何共享打印机的详细教程
  10. intel wifi 5100agn linux驱动,intel5100agn驱动
  11. javascript的ActiveXObject造成“Automation服务器不能创建对象”
  12. 4条地铁线,乘船到西站!杭州西站枢纽综合交通规划设计方案出炉
  13. 利用css修改图标颜色
  14. python三国演义人物 统计分析_《python三国演义》人物统计(一),Python,出场,上...
  15. RobotStudio的基本布局方法,模型加载,工件坐标系的创建,手动操作机器人示教,以及模拟仿真机器人运动轨迹。
  16. Mysql-学习笔记汇总
  17. 如何使用2FA秘钥登录Facebook
  18. 23三种设计模式之代理模式
  19. 孙子兵法 三十六计(猫鼠版)
  20. iphone装android软件,黑科技降临,红手指教你苹果手机如何安装安卓APP

热门文章

  1. C++面向对象程序设计实验题:有理数类(分数类)设计
  2. leetcode sql:游戏玩法分析 III
  3. 【硬件】以太网PHY芯片有三个时钟说明
  4. Android打印机--TSC 标签打印
  5. 基于人脸的常见表情识别(3)——模型搭建、训练与测试
  6. 目前最新版AndroidStudio详细安装教程,纯萌新安装
  7. 电力电子技术的matlab实践 下载,电力电子技术MATLAB仿真实践指导及应用
  8. 免杀远程监控软件大盘点
  9. 百慕大群岛失踪者再现之谜
  10. 餐饮门店每日业务情况数据分析仪表盘(外卖平台)