Python实现计算机屏幕任意区域截图
程序功能与用法:运行后有个主窗体,上面有个按钮,单击后开始截图,鼠标坐标落下开始截图,鼠标左键抬起表示截图结束,然后弹出对话框提示保存截图文件。
本文要点在于Python扩展库pillow提供的ImageGrab支持全屏幕或指定区域的截图。
import tkinter
import tkinter.filedialog
import os
from PIL import ImageGrab
from time import sleep
#创建tkinter主窗口
root = tkinter.Tk()
#指定主窗口位置与大小
root.geometry('100x40+400+300')
#不允许改变窗口大小
root.resizable(False, False)
class MyCapture:
def __init__(self, png):
#变量X和Y用来记录鼠标左键按下的位置
self.X = tkinter.IntVar(value=0)
self.Y = tkinter.IntVar(value=0)
#屏幕尺寸
screenWidth = root.winfo_screenwidth()
screenHeight = root.winfo_screenheight()
#创建顶级组件容器
self.top = tkinter.Toplevel(root, width=screenWidth, height=screenHeight)
#不显示最大化、最小化按钮
self.top.overrideredirect(True)
self.canvas = tkinter.Canvas(self.top,bg='white', width=screenWidth, height=screenHeight)
#显示全屏截图,在全屏截图上进行区域截图
self.image = tkinter.PhotoImage(file=png)
self.canvas.create_image(screenWidth//2, screenHeight//2, image=self.image)
#鼠标左键按下的位置
def onLeftButtonDown(event):
self.X.set(event.x)
self.Y.set(event.y)
#开始截图
self.sel = True
self.canvas.bind('<Button-1>', onLeftButtonDown)
#鼠标左键移动,显示选取的区域
def onLeftButtonMove(event):
if not self.sel:
return
global lastDraw
try:
#删除刚画完的图形,要不然鼠标移动的时候是黑乎乎的一片矩形
self.canvas.delete(lastDraw)
except Exception as e:
pass
lastDraw = self.canvas.create_rectangle(self.X.get(), self.Y.get(), event.x, event.y, outline='black')
self.canvas.bind('<B1-Motion>', onLeftButtonMove)
#获取鼠标左键抬起的位置,保存区域截图
def onLeftButtonUp(event):
self.sel = False
try:
self.canvas.delete(lastDraw)
except Exception as e:
pass
sleep(0.1)
#考虑鼠标左键从右下方按下而从左上方抬起的截图
left, right = sorted([self.X.get(), event.x])
top, bottom = sorted([self.Y.get(), event.y])
pic = ImageGrab.grab((left+1, top+1, right, bottom))
#弹出保存截图对话框
fileName = tkinter.filedialog.asksaveasfilename(title='保存截图', filetypes=[('JPG files', '*.jpg')])
if fileName:
pic.save(fileName+'.jpg')
#关闭当前窗口
self.top.destroy()
self.canvas.bind('<ButtonRelease-1>', onLeftButtonUp)
self.canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES)
#开始截图
def buttonCaptureClick():
#最小化主窗口
root.state('icon')
sleep(0.2)
filename = 'temp.png'
im = ImageGrab.grab()
im.save(filename)
im.close()
#显示全屏幕截图
w = MyCapture(filename)
buttonCapture.wait_window(w.top)
#截图结束,恢复主窗口,并删除临时的全屏幕截图文件
root.state('normal')
os.remove(filename)
buttonCapture = tkinter.Button(root, text='截图', command=buttonCaptureClick)
buttonCapture.place(x=10, y=10, width=80, height=20)
#启动消息主循环
root.mainloop()
温馨提示:单击文章顶部作者名字旁边浅蓝色的“Python小屋”进入公众号,关注后可以查看更多内容!
欢迎转发给您的朋友,或许这正是Ta需要的知识!
Python实现计算机屏幕任意区域截图相关推荐
- Office VBA也能任性截图(屏幕任意区域截图)
Excel是否可以实现屏幕任意区域截图?听起来似乎有些不务正业,已经有那么多截图软件,并且微信.QQ等也都提供了截图功能,但是存在的就是合理的,借助强大的PowerShell就可以实现任意区域截图功能 ...
- Python+tkinter+pillow实现屏幕任意区域截图
基本思路:首先获取并显示全屏幕截图,然后在全屏幕截图上响应鼠标左键按下和抬起事件,最后进行二次截图. import tkinter import tkinter.filedialog import o ...
- 服务器主体信息截图,puppeteer实现线上服务器任意区域截图
整个九月份由于业务繁重以及玩心颇重,一直没有机会来写一篇博文.而且笔者于十月一日将会举办人生大事--婚礼,现在家里筹办过程中只能抽出零碎的时间来写这篇文章. 关于服务端截图,这种使用场景非常少见,大多 ...
- Python实现Excel根据指定区域截图(Windows版本)
# -*- coding:utf-8 -*- __author__ = 'yangxin_ryan' from win32com.client import Dispatch, DispatchEx ...
- python解锁电脑屏幕_使用Python解锁计算机屏幕
要想正常工作,西库里需要用户界面.这意味着用户应该登录. 以下是实现这一目标的步骤: 使用自动登录 您应该重定向控制台,以便随时使用UI在任务调度器中创建新任务 下一步在常规选项卡中检查"以 ...
- python tkinter获取屏幕大小_Python使用鼠标滚轮调整tkinter应用程序窗口大小
图书推荐:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情:用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系统等配套 ...
- LINUX选定区域截图
初学LINUX,记录截图命令,方便自己,方便他人. -------------------------------UBUNTU 16.04------------------------------- ...
- 自定义ImageView系列 - 区域截图(下)
功能要点: - 根据控件自身大小计算合适的透明正方形预览区: - 截取预览区图像并按照指定的尺寸缩放,生成Bitmap对象. 本文着重介绍上述第2个要点. 有关第一个要点的内容,请参阅上一篇文章:请点 ...
- 【python】python实现屏幕指定区域文字提取(百度API)
因为OCR文字识别功能不是特别好,推荐利用百度API的来实现屏幕指定区域的文字识别. 一.如何注册百度API? 1.打开百度api网页,使用百度账号登陆 2.点击控制台,选择文字识别 3.点击创建应用 ...
最新文章
- ubuntu18.04安装mongodb
- 1、Kubernetes 简介
- Python进阶5——切片
- Fastjson 1.2.68版本反序列化漏洞分析篇
- Java中SeparatedListAdapter类的实现
- Python进阶(2)
- 简单看java异常栈
- 走近分形与混沌(part2)-豪斯多夫维数
- 蝗虫算法java代码_蝗虫搜索算法 蝗虫算法:蝗虫优化算法是模拟自然界蝗虫种群捕食行为而提出的一 联合开发网 - pudn.com...
- Asp.Net ListView 控件的使用
- php 2010excel,PHPExcel在php5.2.10上的bug
- Windows获取系统版本号
- 什么叫做展望_在迷茫的时代,选择相信:关于2021经济的一些展望。
- 大一计算机上机考试模拟试题,计算机等级考试二级上机模拟试题(1)
- Java 报表工具选择
- CSDN超实用的浏览器插件—去自家网站/搜索广告、超快捷万能搜索、各种实用小功能等诸多功能等你探索
- 计算机视觉基础(三)——对极几何中的基本矩阵F和本质矩阵E
- 003-Xshell和Xftp连接CentOS
- 文件操作——getc()和putc()函数
- 经典英文歌曲,爆好听!
热门文章
- 安装windows时loading files结束就重启_软网推荐:不用制作系统盘 也能安装新系统...
- java文件按时间排序_如何按日期在java目录中排序文件?
- eggjs增删改查MySQL_egg-sequelize 实现 增删改查
- rpm安装mysql5.6_利用rpm安装mysql 5.6版本详解
- mysql重复数据处理_MySQL 处理重复数据
- 自动工作负载信息库 AWR
- creator图片循环显示_Cocos creator 游戏背景循环滚动--Javascript编写
- Java知识点详解 6 注解
- 小工厂规章制度_小工厂的规章制度(共8篇).doc
- 学习笔记(五)——数据适配器、数据表、数据网格视图控件的综合应用。