目录

前言

实现


前言

最近闲来无事研究了下pyqt5的框架,实现了基于tesseract识图,想在tesseract识图功能中添加个屏幕识图的功能类似于QQ截图,然后将截图自动识字,。

先不多说看看效果图:

主界面图:

截图界面图:

识图结果图:

实现

实现原理其实也挺简单的,借助于qt5的QWidget,重写控件的绘图方法,并且加上些鼠标按钮事件,下面写下主要功能的代码实现。

首先自写个窗口类继承于QWidget,设置窗口类标题栏去除,并且窗口透明显示。


class ScreenCaptureFrame(QWidget):def __init__(self, parent, img: QImage = None):super(ScreenCaptureFrame, self).__init__()# 保存父窗口self.parentWin = parent# 设置窗口无标题栏self.setWindowFlags(Qt.FramelessWindowHint)# 设置窗口透明self.setAttribute(Qt.WA_TranslucentBackground, True)# 设置模态窗口# self.setWindowModality(Qt.ApplicationModal)

然后,因为需要通过鼠标拖出矩形窗口,因此重载窗口鼠标事件,用于记录窗口按下事件与拖动事件,鼠标按下时记录鼠标按下点作为矩形区的开始点,拖动时记录结束点作为矩形结束点,并且刷新窗口重绘矩形区域。

鼠标按下重载:

    def mousePressEvent(self, event: QMouseEvent):"""重写鼠标按下事件:param event::return:"""try:# 鼠标左键按下记录矩形开始点if event.button() == Qt.LeftButton:self.startPoint = event.pos()self.isLeftPress = Trueelse:self.isLeftPress = Falseexcept Exception as e:traceback.print_exc()

鼠标移动事件重载:

    def mouseMoveEvent(self, event: QMouseEvent):"""重写鼠标移动事件:param event::return:"""try:# 鼠标左键按下记录矩形结束点if hasattr(self, "isLeftPress") and self.isLeftPress:self.endPoint = event.pos()self.repaint()except Exception as e:traceback.print_exc()

鼠标松开事件重载:

    def mouseReleaseEvent(self, event: QMouseEvent):"""重写鼠标松开事件:param event::return:"""try:# 鼠标左键按下记录矩形结束点if event.button() == Qt.LeftButton:self.endPoint = event.pos()self.isLeftPress = Falseself.repaint()except Exception as e:traceback.print_exc()

接下来最重要的重载绘图事件:

backPath作为窗口背景矩形区,fillPath作为鼠标拖动区域,通过QPainterPath的substracted方法,去除矩形区域填充半透明背景色。

   def paintEvent(self, event: QPaintEvent):"""重写绘图事件:param event::return:"""try:backPath = QPainterPath()backPath.addRect(0, 0, self.width(), self.height())fillPath = QPainterPath()if hasattr(self, "startPoint") and hasattr(self, "endPoint"):movePath = QPainterPath()movePath.addRect(QRectF(self.startPoint, self.endPoint))fillPath = backPath.subtracted(movePath)else:fillPath = backPath# 创建绘图设备painter = QPainter(self)# 绘制背景图painter.drawImage(QPoint(0, 0), self.backImg)painter.setPen(QPen(QColor(87, 170, 255), 5, Qt.SolidLine))painter.drawPath(fillPath)# 填充非选择区域painter.fillPath(fillPath, QColor(0, 0, 0, 100))except Exception as e:traceback.print_exc()

截图完后,按键操作实现,空格键用于保存截图图片,enter键用于直接返回识图不保存,按键事件重写如下:

    def keyReleaseEvent(self, event: QKeyEvent):"""重写按键事件:param event::return:"""try:# esc键关闭窗口if event.key() == Qt.Key_Escape:self.close()# 父窗口恢复显示self.parentWin.showNormal()# enter键(数字键盘为Key_Enter)返回主窗口识图elif event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter:if not (self.startPoint.x() == self.endPoint.x() and self.startPoint.y() == self.endPoint.y()):image = self.backImg.copy(QRect(self.startPoint, self.endPoint))self.close()# 父窗口恢复显示self.parentWin.showNormal()self.parentWin.childWinCallBack(image)# space键保存选择区域为图片elif event.key() == Qt.Key_Space:if not (self.startPoint.x() == self.endPoint.x() and self.startPoint.y() == self.endPoint.y()):filePath, fileType = QFileDialog.getSaveFileName(self, "保存截图", "./","jpg图片 (*.jpg);;bmp图片(*.bmp);;png图片(*.png)")if filePath.strip() != "":image = self.backImg.copy(QRect(self.startPoint, self.endPoint))image.save(filePath)self.close()# 父窗口恢复显示self.parentWin.showNormal()except Exception as e:traceback.print_exc()

至此,屏幕截图窗口类实现完成,只需要再写个父窗口类调用此窗口类实现屏幕截图功能就可。

以上功能只是仿QQ截图功能代码,完整OCR代码看资源:

https://download.csdn.net/download/zwyact/11646209

基于pyqt5实现QQ截图功能相关推荐

  1. Leaflet框选截图 网页框选截图 -- 类似QQ截图功能

    Leaflet框选截图 网页框选截图 -- 类似QQ截图功能 功能需求 搜索资源 功能拆分 进阶功能 结束语 实现截图(红框中即是将要截取的内容) 下载到本地的截图 功能需求 近日. 项目中有一需求: ...

  2. 2020年7月win32 C\C++ API 写的仿QQ截图功能

    2020年7月win32 C\C++ API 写的仿QQ截图功能 近日,经常用到截图,但是没有QQ没有微信 的电脑上,截图非常不方便,起初打算网上随便找个类似的就算了,但是找了一下午,发现都是些很基础 ...

  3. 【Python • 项目实战】pytesseract+pyqt实现图片识别软件小项目——(二)实现QQ截图功能

    本文默认你已经学习了上一篇文章,如果你还没有学习,就赶快去学习吧.关注博主,学习更多内容. 文章目录 前言 一.任务目的 要求 二.实现截图功能 1. 截图功能分析 理论依据 1. 截图功能 2. 支 ...

  4. javascript在网页中实现粘贴qq截图功能

    这篇文章主要介绍了在网页中实现读取剪贴板粘贴截图功能,即可以把剪贴板的截图Ctrl+V粘贴到网页的一个输入框中,例如QQ截图.旺旺截图或者其它截图软件.具体代码如下. <!DOCTYPE HTM ...

  5. html制作qq注册页面代码截图,javascript在网页中实现粘贴qq截图功能

    这篇文章主要介绍了在网页中实现读取剪贴板粘贴截图功能,即可以把剪贴板的截图Ctrl+V粘贴到网页的一个输入框中,例如QQ截图.旺旺截图或者其它截图软件.具体代码如下. 利用 clipboardData ...

  6. Mac OS X 下 QQ 截图功能开机自启设置方法

    QQ 的截图功能里面是没有开机自启设置的,只有一个退出 QQ 后继续运行的选项. 那么如何设置这个功能自启呢?其实很简单 截止 2017年07月18日,QQ已经更新到 6.0.1 了! 截止 2016 ...

  7. QT做类似QQ截图功能(带图片编辑功能)

    这里采用的方法是按下截屏按钮截取整个桌面,然后通过鼠标的拖动选中截取的区域, 并把这个区域用截取的那张大图中相应的位置设置为QLabel背景, 实现了类似QQ的图片编辑功能,划线.矩形.画圆.文字编辑 ...

  8. qq截图功能自带图片转文字功能

  9. html2canvas 在qq保存失败_QQ的截图功能,没想到这么好用!

    文/安哥拉 Hello大家好,这里是工具狂人. 自从微信崛起后,很多人的社交阵地可能都从QQ转移到了微信. 但微信现存的一些不足,也让一些人开始怀念起了QQ. 相比微信,QQ好用的地方体现在,传输文件 ...

  10. Java实现qq截图工具

    导读:当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出. 本软件采用Java语言进行模拟qq截图功能,获取屏幕方式灵活,可以获取指定的屏幕,并且 ...

最新文章

  1. mave工程中的一个类调用另一个聚合工程的一个类_信息系统管理工程师备考分享(材料重点精炼)——第一章信息化和信息系统(4)...
  2. 设计模式:原型模式(C++)【克隆羊多莉】
  3. mysql 直接删表空间文件_oracle删除(释放)数据文件/表空间流程
  4. 斗战神总是显示连接服务器失败,全民斗战神怎么进不去 全民斗战神进不去的原因和解决办法...
  5. linux下安卓刷机,linux下安卓刷机脚本
  6. r语言调用python_如何在Rstudio中使用python 语言 (图文详解)
  7. elasticsearch 模板
  8. AAAI 2020 | 清华大学:借助BabelNet构建多语言义原知识库
  9. 容斥原理在C语言中的应用,容斥原理在排列问题中的应用实例
  10. 计算机带不动移动硬盘,我笔记本的USB带不动移动硬盘,但另外一台电脑又可以,同样的盘盒,换一块硬盘又可以,...
  11. 我不喜欢代码,却为何坚持做程序员?
  12. sql注入进阶/user-agent/基于报错的注入/保姆级教程/一看就会/
  13. 以太网io模块4-20mA转网口转TCP/IP西门子PLC扩展modbus模块
  14. .NET简单的登录邮箱验证
  15. 思科交换机备份文件到服务器,CISCO交换机备份和恢复配置文件的方法
  16. freeswitch + dbl 呼入设置
  17. 存款利息的计算。有1000元,想存5年,可按以下5种办法存:(1)一次存5年期 (2)先存2年期,到期后将本息再存3年期 (3)先存3年期,到期后将本息再存2年期 (4)存1年期,到期后将本息再
  18. Moore Voting
  19. IE6及IE8默认SSL设置
  20. Mac程序坞显示App预览的多窗口小窗(像Windows一样)——HyperDock

热门文章

  1. 应该被记住的天才,写在图灵诞辰100周年
  2. 彻底与流氓软件“2345好压全家桶”说再见【忠告:不要安装2345系列的任何东西--否则你会后悔的】
  3. Hbase与Hadoop版本对应
  4. 这16个数据可视化案例,惊艳了全球数据行业
  5. 云计算机网速慢,电脑网速慢是什么原因 十点助你快速解决【图文】
  6. Xposed模拟位置
  7. 计算机类耗品有哪些,办公用品和办公耗材清单有哪些?
  8. Win10怎么提高显卡游戏性能
  9. 软件架构师-Scrum敏捷开发-MVC模型-燃尽图
  10. canvas贝塞尔曲线爱心_贝塞尔曲线之爱心点赞代码全解析!| CSDN 博文精选