PySide(PyQt)在图像上画线

1、按鼠标左键任意画线

import sys
from PySide6.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
from PySide6.QtGui import QPainter, QPixmap, QMouseEvent, QColor, QPen
from PySide6.QtCore import Qt, QPointclass PaintLabel(QLabel):def __init__(self, parent=None):super(PaintLabel, self).__init__(parent)self.setFixedSize(500, 500)self.pixmap = QPixmap(500, 500)  # 创建图像self.pixmap.fill(QColor('#000000'))  # 设为黑色self.setPixmap(self.pixmap)  # 设置图像self.drawing = Falseself.last_point = QPoint()def mousePressEvent(self, event: QMouseEvent):if event.button() == Qt.LeftButton:self.drawing = Trueself.last_point = event.position()def mouseMoveEvent(self, event: QMouseEvent):if event.buttons() & Qt.LeftButton and self.drawing:painter = QPainter(self.pixmap)pen = QPen(QColor('red'))pen.setWidth(3)painter.setPen(pen)painter.drawLine(self.last_point, event.position())self.last_point = event.position()self.setPixmap(self.pixmap)def mouseReleaseEvent(self, event: QMouseEvent):if event.button() == Qt.LeftButton:self.drawing = Falseclass MainWindow(QWidget):def __init__(self):super().__init__()self.label = PaintLabel()layout = QVBoxLayout()layout.addWidget(self.label)# layout.addWidget(save_button)self.setLayout(layout)if __name__ == "__main__":app = QApplication(sys.argv)main_window = MainWindow()main_window.show()sys.exit(app.exec())

2、画直线 

 

import sys
from PySide6.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
from PySide6.QtGui import QPainter, QPixmap, QMouseEvent, QColor, QPen
from PySide6.QtCore import Qt, QPoint, QLineclass PaintLabel(QLabel):def __init__(self, parent=None):super(PaintLabel, self).__init__(parent)self.line = QLine()self.setFixedSize(500, 500)self.pixmap = QPixmap(500, 500)  # 创建图像self.pixmap.fill(QColor('#000000'))  # 设为黑色self.setPixmap(self.pixmap)  # 设置图像self.drawing = False         # 是否绘画中self.start_pos = QPoint()    # 起点self.end_pos = QPoint()      # 终点def mousePressEvent(self, event: QMouseEvent):if event.button() == Qt.LeftButton:self.drawing = Trueself.start_pos = event.position().toPoint()def mouseMoveEvent(self, event: QMouseEvent):if event.buttons() & Qt.LeftButton and self.drawing:self.end_pos = event.position().toPoint()self.line = QLine(self.start_pos, self.end_pos)self.update()def mouseReleaseEvent(self, event: QMouseEvent):if event.button() == Qt.LeftButton:self.drawing = Falseself.update()def paintEvent(self, event):super().paintEvent(event)  # 继承绘画事件if self.drawing:  # 如果正在绘画中painter = QPainter(self)  # 就不必刷新和写入,只是在当前的label上展示一下新增的线条而已pen = QPen(QColor(0, 255, 0), 2, Qt.CustomDashLine)   # 虚线pen.setDashPattern([1, 4, 5, 4])  # 设置自定义虚线模式painter.setPen(pen)painter.drawLine(self.line)painter.end()else:painter = QPainter(self.pixmap)  # 如果是松开鼠标的最后结果,就在图像上画painter.setPen(QPen(QColor(255, 0, 0, 255), 2, Qt.SolidLine))painter.drawLine(self.line)self.line = QLine()   # 画完后舍弃self.setPixmap(self.pixmap)    # 刷新显示class MainWindow(QWidget):def __init__(self):super().__init__()self.label = PaintLabel()layout = QVBoxLayout()layout.addWidget(self.label)self.setLayout(layout)if __name__ == "__main__":app = QApplication(sys.argv)main_window = MainWindow()main_window.show()sys.exit(app.exec())

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/364616.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本教程将指导如何通过 Vue 组件和后端 API 交互

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

Redis 集群模式

一、集群模式概述 Redis 中哨兵模式虽然提高了系统的可用性,但是真正存储数据的还是主节点和从节点,并且每个节点都存储了全量的数据,此时,如果数据量过大,接近或超出了 主节点 / 从节点机器的物理内存,就…

【Python系列】列表推导式:简洁而强大的数据操作工具

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

洛谷 P1548 [NOIP1997 普及组] 棋盘问题

题目 洛谷 P1548 [NOIP1997 普及组] 棋盘问题 [NOIP1997 普及组] 棋盘问题 题目背景 NOIP1997 普及组第一题 题目描述 设有一个 N M N \times M NM 方格的棋盘 ( 1 ≤ N ≤ 100 , 1 ≤ M ≤ 100 ) (1≤N≤100,1≤M≤100) (1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正…

【Hadoop学习笔记】认识Hadoop

认识Hadoop 从网上找的课程做的笔记,有些图是自己理解画的,可能不正确,可以作为参考,有疑问的地方请直接指出,共同交流。 Hadoop是由Apache基金会开发的一个分布式系统基础架构,主要解决海量数据的存储和海…

不知道自己的优势擅长和兴趣爱好,我该如何填报高考志愿选专业?

天生我才必有用,每个人都是独立的个体,拥有自己的优势和擅长,当然这个优势和擅长,不是和别人对比,而是和自己对比产生的。 如果说你不知道自己的优势擅长,不知道自己的兴趣和爱好,那只不过是你没…

HarmonyOS APP应用开发项目- MCA助手(持续更新中~)

简言: gitee地址:https://gitee.com/whltaoin_admin/money-controller-app.git端云一体化开发在线文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/agc-harmonyos-clouddev-view-0000001700053733-V5 注&#xff1…

架构师篇-7、企业安全架构设计及实践

摘要: 认识企业安全架构企业安全案例分析及实践 内容: 为什么做企业安全架构怎么做好安全架构设计案例实践分析&随堂练 为什么要做企业安全架构 安全是麻烦制造者? 整天提安全需求增加开发工作增加运维要求增加不确定性延后业务上线…

【Docker】docker 替换宿主与容器的映射端口和文件路径

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 docker 替换宿主与容器的映射端口和文件夹 1. 正文 1.1 关闭docker 服务 systemctl stop docker1.2 找到容器的配置文件 cd /var/lib/docker/contain…

thymeleaf+mybatis(本文章用于期末考前10分钟速看)

期末速看 pom(了解)application.propertiessql代码Controller控制层视图service: 服务层mapper(dao):持久层entity层(model层,domain层、 bean):对应数据库表,实体类 效果…

BIM 模型三维展示方式

三维模型展示场景目前主流的使用 threejs ,bably.js 引擎框架作为开发展示;对于特殊的封闭式模型格式需要二次转换处理;今天推荐一款直接将模型碎片化处理方式,同时能够在网页加载速度快,性能也很流畅,先看结果&#x…

llama3模型部署时遇到的问题及解决方案

在llama3模型部署时,会遇到一系列问题,这里就作者所遇到的问题与解决方法分享一下。 注意:这里是从llama3 github主页上给的方法一步步做的,不适用于其他部署大模型的方法。 文章目录 ERROR 403:Forbidden安装依赖时出…

【Python游戏】猫和老鼠

本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结一、前言 本文介绍如何使用Python的海龟画图工具turtle,开发猫和老鼠游戏。 什么是Python? Python是由荷兰人吉多范…

后端之路第三站(Mybatis)——结合案例讲Mybatis怎么操作sql

先讲一下准备工作整体流程要做什么 我们要基于一个员工管理系统作为案例,进行员工信息的【增、删、改、查】 原理就是用Mybatis通过java语言来执行sql语句,来达到【增、删、改、查】 一、准备工作 1、引入数据库数据 首先我们把一个员工、部门表的数…

简述设计模式-工厂模式

概述 工厂模式是为了提供创建对象的方式,无需制定要创建的具体类。 举个例子,假如我是甲方需要制造一辆车,我可以要油车,可以要电车,也可以油电混动车,如果没有工厂,我需要自己找到对应的制造…

机电公司管理小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,管理员管理,客户管理,公告管理,考勤管理,请假管理 微信端账号功能包括:系统首页,公告,机电零件…

【单片机毕业设计11-基于stm32c8t6的智能水质检测】

【单片机毕业设计11-基于stm32c8t6的智能水质检测】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 🔥这里是小殷学长,单片机毕业设计篇11基于stm32的智能水质检测系统 🧿创作不易,拒绝白嫖可私 一、功能介绍 -------------…

独家原创 | Matlab实现CNN-Transformer多变量时间序列预测

SCI一区级 | Matlab实现BO-Transformer-GRU多变量时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-GRU多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-Transformer多变量时间序列预测; 2.运行环境为Matlab2023b…

英飞凌TC3xx之DMA工作原理及应用实例

英飞凌TC3xx之DMA工作原理及应用实例 1 DMA的架构2 必要的术语解释3 DMA请求3.1 DMA软件请求3.2 DMA硬件请求3.3 DMA 菊花链请求3.4 DMA自动启动请求3.5 总结4 小结DMA是直接存储访问Direct Memory Access的简称。它的唯一职能就是在不需要CPU参与的情况下,将数据从源地址搬运…

计算机Java项目|基于SpringBoot的作业管理系统设计与实现

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…