矩形

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. 从上到下打印二叉树 II
  2. 微信「看一看」 朋友在看的增强推荐系统
  3. 在装好的xp系统里面如何添加新的硬件设备
  4. 二、先在SD卡上启动U-boot,再烧写新的U-boot进Nandflash
  5. MGraph图(代码、分析、汇编)
  6. 关于数据挖掘关联规则的Oracle实现
  7. Django框架——状态保持(cookie、session)
  8. iPad mini 6外形巨变:升级全面屏 还要砍掉Home键
  9. mysql 报错跳过_mysql跳过主从同步错误
  10. 手把手教你在eclipse 中 配置maven
  11. TP收集一些可以用的资源
  12. java url dns_JAVA反序列化-ysoserial-URLDNS
  13. jquery thinkphp mysql_ThinkPHP5+jQuery+MySql如何实现投票功能
  14. Alfred效率神器
  15. 【2021版】想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础(四)
  16. Ae 效果快速参考:音频
  17. 数据通信基础之双绞线
  18. 我们应如何迎接新式客服业到来?
  19. 利用MATLAB求解积分
  20. 电视墙解码服务器不在线,超高清电视墙服务器

热门文章

  1. 用Python爬虫爬取自己要的文章
  2. “零极限”的方法为什么如此神奇?
  3. 【Latex】算法排版规律(中文排版)
  4. 金多多配资主流资金超短策略
  5. Linux环境中,GitHub的配置使用极简教程
  6. 斐讯路由器怎样设置虚拟服务器,斐讯wifi路由器怎样设置
  7. 【tensorflow:实战Google深度学习框架】读后感
  8. 量子世界如何成为现实世界
  9. UE4动画 高级运动系统 AdvancedLocomotionSystemV 解析
  10. 推荐一款好用的浏览器Yandex