iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现一个简单的QQ截图
  • 703
分享到

Python实现一个简单的QQ截图

2024-04-02 19:04:59 703人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言一、需求分析二、截图三、矩形选择四、按钮设置总结前言   毕设有一部分要用到类似QQ截图的功能,这里记录制作过程。因为后期要添加人工智能的功能,所以用py

前言

  毕设有一部分要用到类似QQ截图的功能,这里记录制作过程。因为后期要添加人工智能的功能,所以用python来写桌面应用。

一、需求分析

  可以简单的将过程分为以下三步:

点击按钮或敲击快捷键进入截图模式;在截图模式通过鼠标左键按压/松开选取矩形区域;将矩形区域截图保存到指定目录或者剪贴板。

现在我将从第三步开始一步步向上搜索、编写、验证。

二、截图

  通过对“Python”和“截图”两个关键字搜索不难发现python有多种满足我们需求的函数,这里选用PIL库的grab()函数。time函数是用来测试截图速度的。

from PIL import ImageGrab
import time

# 截取图像
def catch_area(left, top, right, bottom):
    return ImageGrab.grab((left, top, right, bottom))
# 测试函数
def test():
    first = time.time()
    catch_area(101,101,200,300).save('D:/1.jpg')
    print(time.time() - first)

test()

三、矩形选择

  截图函数需要四个参数,即矩形区域的上下左右的坐标。为了获取这四个参数我们需要监听鼠标的点击事件。我本来想搜寻一个全局监听器的api的,这里选用的是pyhook。但是测试发现不支持python2.7,而python3.7的安装过程极其复杂,故放弃此方法。
  后来我想到可以利用GUI生成一个全屏的button,然后监听对这个button的点击事件。这里的GUI选用wxPython,3.7版本直接pip安装。

import wx
from PIL import ImageGrab

class ScreenShot(wx.Frame):
    left,right,top,bottom = 0,0,0,0
    img = None

    def __init__(self, parent):
        wx.Frame.__init__(self, parent,
            style = wx.MAXIMIZE # 全屏显示
        )
        # 设置背景色
        self.SetBackgroundColour((255,255,255))
        # 设置透明度
        self.SetTransparent(30)
        # 注册事件
        self.Bind(wx.EVT_LEFT_DOWN, self.OnDown, self)
        self.Bind(wx.EVT_LEFT_UP, self.OnUp, self)
        # 显示button
        self.Show(True)

    def OnDown(self, event):
        pos = event.GetPosition()
        self.top = pos.y
        self.left = pos.x
        
    def OnUp(self, event):
        pos = event.GetPosition()
        self.bottom = pos.y
        self.right = pos.x
        
        print(self.left, self.top, self.right, self.bottom)
        self.img = self.catch_area(
            self.left, self.top, self.right, self.bottom)
        # 截图完毕后关闭button
        self.Close(False)

    def catch_area(self, left, top, right, bottom):
        return ImageGrab.grab((left, top, right, bottom))
        
# 测试用例
# app = wx.App(False)
# frame = ScreenShot(None)
# app.MainLoop()

这里只是将截得图像存在img变量中,至于后续操作请各位自行实现。

四、按钮设置

  最后需要构造一个按钮并为其设置快捷键/热键。GUI同样使用之前的wxPython。页面就随便写写;设置快捷键即为某个控件绑定键盘事件,需要将焦点聚集到某个控件上;而热键是可以全局使用,热键设置可将事件绑定到菜单选项上,也可以直接注册。这里直接注册热键。

import wx
import ScreenShot as SS

class MainWindow(wx.Frame):
    def __init__(self, parent):
        # 视窗属性
        wx.Frame.__init__(self, parent,
            size = (1000, 200),         # 视窗大小
            style = wx.CLIP_CHILDREN,   # 视窗样式,这个样式可以去掉原生的标题栏
            #pos = (200, 200)           # 视窗位置,下面设置居中了
        )
        # 创建位于窗口的底部的状态栏
        self.CreateStatusBar()
        # 布局
        self.root = wx.BoxSizer(wx.VERTICAL)
        self.menu = wx.BoxSizer(wx.HORIZONTAL)
        self.body = wx.BoxSizer(wx.VERTICAL)
        self.menuText = [u"开始截图", u"退出"]
        self.menubuttons = []
        for i in range(0, 2):
            # 新建按键
            self.menubuttons.append(wx.Button(self, -1, self.menuText[i]))
            self.menu.Add(self.menubuttons[i], 1, wx.SHAPED)
        # 新建只读文本框(预留)
        self.control = wx.TextCtrl(self, style = wx.TE_READONLY)
        self.body.Add(self.control, 1, wx.GROW)
        self.root.Add(self.menu, 1, wx.GROW)
        self.root.Add(self.body, 4, wx.EXPAND)
        # 激活布局
        self.SetSizer(self.root)
        self.SetAutoLayout(True)
        # self.root.Fit(self) # 适应内部大小
        # 事件注册
        self.Bind(wx.EVT_BUTTON, self.OnStart, self.menubuttons[0])
        self.Bind(wx.EVT_BUTTON, self.OnExit, self.menubuttons[1])
        # 热键注册
        self.hoTKEy = wx.NewIdRef()  # 创建id
        self.ReGISterHotKey(self.hotkey, wx.MOD_CONTROL, ord('Q'))  # 注册热键(按ctrl+Q键响应)
        self.Bind(wx.EVT_HOTKEY, self.OnKeyBoard, id=self.hotkey)   # 绑定热键事件
        # 窗口居中
        self.Center()
        # 显示视窗
        self.Show(True)

    # 开始截图
    def OnStart(self, event):
        SS.ScreenShot(self)

    # 关闭整个应用
    def OnExit(self, event):
        self.Destroy()    

    # 热键事件
    def OnKeyBoard(self, event):
        SS.ScreenShot(self)

app = wx.App(False)
frame = MainWindow(None)
app.MainLoop()

总结

  最后两个代码块就是完整应用。这只是一个十分粗略的应用,很多细节都没有优化,比如最小化到托盘、选取区域时自动标出区域。若各位有能力可自行实现。到此这篇关于Python实现一个简单的QQ截图的文章就介绍到这了,更多相关python QQ截图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

 

--结束END--

本文标题: Python实现一个简单的QQ截图

本文链接: https://www.lsjlt.com/news/138707.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python实现一个简单的QQ截图
    目录前言一、需求分析二、截图三、矩形选择四、按钮设置总结前言   毕设有一部分要用到类似QQ截图的功能,这里记录制作过程。因为后期要添加人工智能的功能,所以用py...
    99+
    2024-04-02
  • C#仿QQ实现简单的截图功能
    目录实现功能开发环境实现代码实现效果接上一篇写的截取电脑屏幕,我们在原来的基础上加一个选择区域的功能,实现自定义选择截图。 个人比较懒,上一篇的代码就不重新设计了,就简单改一下呈现方...
    99+
    2024-04-02
  • 利用Python实现一个简易的截图工具
    这是工作期间同事想要个截完图之后可以显示并且永远前置的截图小工具(即不会被其他程序覆盖)直接上代码: # # -*- coding: utf-8 -*- import tkinter...
    99+
    2024-04-02
  • 怎么用Python实现一个简易的截图工具
    这篇文章主要讲解了“怎么用Python实现一个简易的截图工具”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python实现一个简易的截图工具”吧!代码:# # -*...
    99+
    2023-07-02
  • iOS实现简单长截图
    本文实例为大家分享了iOS实现简易的长截图的具体代码,供大家参考,具体内容如下 长截图的实现原理: 实际上是将view的内容绘制成图片,再将各个view绘制出来的图片拼接出来。 具体...
    99+
    2024-04-02
  • python实现一个简单的dnspod
    实现一个简单的dnspod解析api:dnspod api地址:https://www.dnspod.cn/docs/records.html#record-create #!/usr/bin/env python # -*- coding...
    99+
    2023-01-31
    简单 python dnspod
  • 用Python实现一个简单的WebSoc
    ubuntu下python2.76 windows python 2.79, chrome37 firefox35通过 代码是在别人(cddn有人提问)基础上改的, 主要改动了parsedata和sendmessage这2个函数. 改代码...
    99+
    2023-01-31
    简单 Python WebSoc
  • 原生JS实现简单屏幕截图
    目录了解 HTML5 中的 Canvas获取屏幕截图结论在 Web 开发中,截图是一项非常有用的技术。可以使用截图来记录当前屏幕状态,生成缩略图或进行屏幕分享等操作。在本文中,我将介...
    99+
    2023-05-15
    JS 屏幕截图 JS 原生截图
  • 用Python实现一个简单的线程池
    线程池的概念是什么?在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是 如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能...
    99+
    2023-01-31
    线程 简单 Python
  • 用Python实现几个简单的图片特效
    导入 numpy 、PIL numpy用来做矩阵运算,PIL用来读取图片。 import numpy as np from PIL import Image 读取图片,然后转换成RGB模式存在矩阵里 im = Image.open...
    99+
    2023-01-31
    几个 特效 简单
  • Python写一个简单的api接口的实现
    python框架有很多,例如:Flask,Django,FastAPI 等。本文将使用 Flask 来编写 API 接口。 安装Flask 首先,您需要安装 Flask: pip i...
    99+
    2023-02-14
    Python api接口 Python api
  • Android实现一个简单的单词本
    目录布局设计代码AddDanciActivity.javaDBOpenHelper.java效果图总结本文基于Java实现了一个简单的单词本安卓app,用的是SQLite数据库,包括...
    99+
    2024-04-02
  • 用Python实现一个简单的用户系统
    目录前言正文总结前言  如标题所说,这是一个非常简单的程序,并不涉及任何高深的学问,更适合一些刚入手Python的新人研究一下基础内容的用法,此案列对于有些编程经验的人来讲...
    99+
    2024-04-02
  • Python元类编程实现一个简单的ORM
    目录概述效果步骤结束语完整代码概述 什么是ORM    ORM全称“Object Relational Mapping”,即对象-关系映射,就是把关系数据库的...
    99+
    2023-03-06
    Python元类编程ORM Python ORM
  • python实现一个简单的web应用框架
    目录引言写应用框架需要写底层服务器么uwsgi基本使用安装uwsgi配置uwsgiuwsgi常用配置uwsgi启服和停服启动一个demo写一个简单的web应用框架总结引言 本篇文章所...
    99+
    2023-05-18
    python web应用框架 python web
  • 【Python】实现一个简单的区块链系统
    本文章利用 Python 实现一个简单的功能较为完善的区块链系统(包括区块链结构、账户、钱包、转账),采用的共识机制是 POW。 一、区块与区块链结构 Block.py import hashlibfrom datetime import ...
    99+
    2023-09-22
    区块链 python 共识算法
  • springmvc实现简单的拦截器
    SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Interceptor类要实...
    99+
    2023-05-31
    springmvc 拦截器 实现简单
  • Vue拖动截图功能的简单实现方法
    拖动鼠标进行页面截图(也可指定区域拖动截图) 一、安装html2canvas、vue-cropper npm i html2canvas --save //用于...
    99+
    2024-04-02
  • 原生JS怎么实现简单屏幕截图
    这篇文章主要介绍“原生JS怎么实现简单屏幕截图”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“原生JS怎么实现简单屏幕截图”文章能帮助大家解决问题。了解 HTML5 中的 CanvasHTML5 中的...
    99+
    2023-07-06
  • 用Python实现一个简单的抽奖小程序
    目录写在前面 实现结果 1 数据拉取2 数据清洗、去重3 中奖数据抽取python 相关知识点总结写在前面  因为粉丝福利,所以想自己写一个抽...
    99+
    2023-05-12
    python抽奖系统 python随机抽奖 python抽奖游戏
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作