矩形

from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtWidgets import QWidget, QApplicationclass DrawRect(QWidget):def __init__(self, parent=None):super(DrawRect, self).__init__(parent)self.resize(600, 400)self.start_point = Noneself.end_point = Noneself.start = Falseself.drawing = Falseself.setCursor(Qt.CrossCursor)self.setMouseTracking(True)def paintEvent(self, event):super(DrawRect, self).paintEvent(event)if self.drawing:painter = QPainter()painter.begin(self)pen = QPen(Qt.red, 5)painter.setPen(pen)painter.drawRect(QRect(self.start_point, self.end_point))painter.end()def mousePressEvent(self, event):if not self.start:self.start_point = event.pos()self.start = Truedef mouseReleaseEvent(self, event):if self.drawing:self.drawing = Falseself.start = Falsedef mouseMoveEvent(self, event):if self.start:self.end_point = event.pos()self.drawing = Trueself.update()if __name__ == '__main__':app = QApplication([])demo = DrawRect()demo.show()app.exec_()

import mathfrom PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtWidgets import QWidget, QApplicationclass DrawRect(QWidget):def __init__(self, parent=None):super(DrawRect, self).__init__(parent)self.resize(600, 400)self.start_point = Noneself.end_point = Noneself.start = Falseself.drawing = Falseself.radius = 0self.setCursor(Qt.CrossCursor)self.setMouseTracking(True)def paintEvent(self, event):super(DrawRect, self).paintEvent(event)if self.drawing:painter = QPainter()painter.begin(self)pen = QPen(Qt.red, 5)painter.setPen(pen)painter.drawEllipse(self.start_point, self.radius, self.radius)painter.end()def mousePressEvent(self, event):if not self.start:self.start_point = event.pos()self.start = Truedef mouseReleaseEvent(self, event):if self.drawing:self.drawing = Falseself.start = Falsedef mouseMoveEvent(self, event):if self.start:self.end_point = event.pos()self.radius = self.calc_radius()self.drawing = Trueself.update()def calc_radius(self):return math.sqrt((self.start_point.x() - self.end_point.x()) ** 2 + (self.start_point.y() - self.end_point.y()) ** 2)if __name__ == '__main__':app = QApplication([])demo = DrawRect()demo.show()app.exec_()

斜矩形

from PyQt5.QtCore import Qt, QPointF, QLineF
from PyQt5.QtGui import QPainter, QPen, QPolygonF
from PyQt5.QtWidgets import QWidget, QApplicationclass DrawRect(QWidget):def __init__(self, parent=None):super(DrawRect, self).__init__(parent)self.resize(600, 400)self.point1 = Noneself.point2 = Noneself.cursor_point = Noneself.point_count = 0self.line = Noneself.polygon = Noneself.end = Falseself.is_line = Falseself.is_polygon = Falseself.setCursor(Qt.CrossCursor)self.setMouseTracking(True)def paintEvent(self, event):super(DrawRect, self).paintEvent(event)if self.is_polygon and self.polygon:painter = QPainter()painter.begin(self)pen = QPen(Qt.red, 5)painter.setPen(pen)painter.drawPolygon(self.polygon)painter.end()elif self.is_line and self.line:painter = QPainter()painter.begin(self)pen = QPen(Qt.red, 5)painter.setPen(pen)painter.drawLine(self.line)painter.end()def mousePressEvent(self, event):if self.point_count == 0:self.point1 = event.pos()self.point_count = 1elif self.point_count == 1:self.point2 = event.pos()self.point_count = 2def mouseReleaseEvent(self, event):if self.end:self.end = Falseself.point_count = 0def mouseMoveEvent(self, event):if self.point_count == 1:self.is_line = Trueself.is_polygon = Falseself.point2 = event.pos()self.calc_line()if self.point_count == 2:self.cursor_point = event.pos()self.calc_polygon()self.end = Trueself.is_line = Falseself.is_polygon = Trueself.update()def calc_line(self):self.line = QLineF(self.point1, self.point2)def calc_polygon(self):point_list = [self.point1, self.point2]x1 = self.point1.x()y1 = self.point1.y()x2 = self.point2.x()y2 = self.point2.y()x3 = self.cursor_point.x()y3 = (x2 ** 2 - 2 * x1 * x2 + y2 ** 2 - 2 * y1 * y2 + y2 ** 2 + x2 ** 2 - 2 * x2 * x3 + 2 * x1 * x3) / (2 * y2 - 2 * y1)# 参考链接:https://blog.csdn.net/zhouschina/article/details/14647587dx = x2 - x3dy = y2 - y3if abs(dx) < 0.00000001 and abs(dy) < 0.00000001:returnu = (self.cursor_point.x() - x2) * (x2 - x3) + (self.cursor_point.y() - y2) * (y2 - y3)u = u / ((dx * dx) + (dy * dy))x3 = x2 + u * dxy3 = y2 + u * dypoint3 = QPointF(x3, y3)point_list.append(point3)x4 = x1 + x3 - x2y4 = y1 + y3 - y2point4 = QPointF(x4, y4)point_list.append(point4)self.polygon = QPolygonF(point_list)if __name__ == '__main__':app = QApplication([])demo = DrawRect()demo.show()app.exec_()

多边形

from PyQt5.QtCore import Qt, QLineF
from PyQt5.QtGui import QPainter, QPen, QPolygonF
from PyQt5.QtWidgets import QWidget, QApplicationclass DrawPolygon(QWidget):def __init__(self, parent=None):super(DrawPolygon, self).__init__(parent)self.resize(600, 400)self.setCursor(Qt.CrossCursor)self.setMouseTracking(True)self.line_list = []self.point_list = []self.cursor_point = Noneself.end_point = Nonedef paintEvent(self, event):super(DrawPolygon, self).paintEvent(event)if not self.point_list:returnif self.end_point:painter = QPainter()painter.begin(self)pen = QPen(Qt.red, 5)painter.setPen(pen)polygon = QPolygonF(self.point_list)painter.drawPolygon(polygon)painter.end()returnif len(self.point_list) == 1:painter = QPainter()painter.begin(self)pen = QPen(Qt.red, 5)painter.setPen(pen)line = QLineF(self.point_list[0], self.cursor_point)painter.drawLine(line)painter.end()else:painter = QPainter()painter.begin(self)pen = QPen(Qt.red, 5)painter.setPen(pen)polygon = QPolygonF(self.point_list + [self.cursor_point])painter.drawPolygon(polygon)painter.end()def mousePressEvent(self, event):if self.end_point:# 重新开始绘制self.point_list = []self.end_point = Noneself.point_list.append(event.pos())self.update()def mouseDoubleClickEvent(self, event) -> None:self.end_point = event.pos()self.point_list.append(self.end_point)self.update()def mouseMoveEvent(self, event):self.cursor_point = event.pos()self.update()if __name__ == '__main__':app = QApplication([])demo = DrawPolygon()demo.show()app.exec_()

PyQt5绘制图形(圆、矩形、斜矩形、多边形)相关推荐

  1. Qt基本图形绘制(圆、圆角矩形、圆弧、椭圆、扇形等)

    首先介绍一下Qt的坐标机制: Qt的坐标与我们常见的坐标不同,如图,假设下图的矩形就是我们的窗口,矩形左上角顶点即为坐标原点: 绘制矩形 核心代码: paint->drawRect(20,20, ...

  2. 力扣(LeetCode)个人主页draw()方法怎么画出好看图案? // 使用函数 draw 绘制图形,反斜杠 “\“ 请使用 “\\“ 转义

    零.引言 先赞后看,月薪过万! 一. 力扣彩蛋 力扣在这里默认配置了一个图形,点击之后还能看到一段代码. draw("_ _ _ _ __ __ _ _ | | | | | | | \ \ ...

  3. OpenCV与图像处理学习三——线段、矩形、圆、椭圆、多边形的绘制以及文字的添加

    OpenCV与图像处理学习三--线段.矩形.圆.椭圆.多边形的绘制以及文字的添加 一.OpenCV中的绘图函数 1.1 线段绘制 1.2 矩形绘制 1.3 圆绘制 1.4 椭圆的绘制 1.5 多边形绘 ...

  4. OpenCV-基本图形绘制(圆、矩形、椭圆)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 circle函数原型 void circle(InputOutputArray img, Poi ...

  5. 【OpenCV3】几何图形(直线、矩形、圆、椭圆、多边形等)绘制

    在图像处理的过程中,我们有时需要在图像或者视频上画上一些图案或者绘上一些文字.OpenCV中提供了各种功能的绘图函数,使用这些函数,我们可以在图像上绘制直线.矩形.圆.椭圆.多边形等等. 1.cv:: ...

  6. IOS开发—IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形

    一.绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形 //一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画CGContextRef context = UIGrap ...

  7. Leaflet学习之路五——动态绘制图形(点、线、圆、多边形)

    leaflet动态绘制图形 动态绘点 动态绘线 动态绘多边形 动态绘制矩形 2020.3.16更新 更新日志: 2019.1.14:更新了绘制多边形时tmpline没有移除的问题 2019.1.15: ...

  8. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...

  9. HTML5利用Canvas绘制图形(Canvas基本知识、绘制矩形、使用路径和图形组合)

    绘制图形有很多方法,可以借助Flash实现,也可以使用SVG和VML来绘图.本次将要学习一种新的灰土方法--使用Canvas元素,它是基于HTML5原生的绘图功能.使用Canvas元素,可以绘制图形, ...

最新文章

  1. Java C# 加密解密类库
  2. powerdesigner 新建按钮是灰色的
  3. 介绍一个功能强大的 Visual Studio Code 扩展 - Rest Client,能部分替代 Postman
  4. c语言中条件编译相关的预编译指令
  5. Objective-C 反射机制
  6. Jsp+Servlet+Mysql实现的二手物品在线商城源码
  7. 互联网产品之百万级高并发技术整体架构
  8. 如何禁用 MacBook 在打开盖子时自动启动功能
  9. (BFS/状态压缩)HDU 5025 Saving Tang Monk
  10. 周杰伦何以成青少年偶像
  11. 小红书商品详情API接口(商品详情页面数据接口)
  12. Unity 内置着色器下载方法
  13. 几个命令查看ELF文件的“秘密”
  14. response概述
  15. 【ORACLE】ORACLE IMPDP导入提示ORA-01918:user‘XXX’ does not exist
  16. 相位相关影像匹配算法
  17. 测开高阶技术- Docker/环境布置/容器 讲清楚了,全套教程
  18. 【二分法】多种情况下的边界条件,区间选择汇总,小结
  19. 电厂计算机房设计规范,发电厂消防设计规范.docx
  20. 孕妇能长期在计算机屏幕前工作吗,怀孕期的孕妈妈们每天在电脑前呆多久?

热门文章

  1. poi下载模板含下拉框
  2. 小啊呜产品读书笔记001:《邱岳的产品手记-15》第28讲 产品分析的套路(上):谁是利益相关者? 29讲产品分析的套路(中):解决什么问题?
  3. Python--filter
  4. 熊猫阿波的故事及C++保留小数点的问题
  5. 又一所211大学改考408!华中师范大学计算机学硕专硕全改考了
  6. iOS 常用图尺寸 汇总
  7. webservice 使用
  8. 超级玛丽游戏开发五(动作音效)
  9. 工资管理系统-C++
  10. 超市商品陈列原则口诀