程序功能与用法:运行后有个主窗体,上面有个按钮,单击后开始截图,鼠标坐标落下开始截图,鼠标左键抬起表示截图结束,然后弹出对话框提示保存截图文件。

本文要点在于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实现计算机屏幕任意区域截图相关推荐

  1. Office VBA也能任性截图(屏幕任意区域截图)

    Excel是否可以实现屏幕任意区域截图?听起来似乎有些不务正业,已经有那么多截图软件,并且微信.QQ等也都提供了截图功能,但是存在的就是合理的,借助强大的PowerShell就可以实现任意区域截图功能 ...

  2. Python+tkinter+pillow实现屏幕任意区域截图

    基本思路:首先获取并显示全屏幕截图,然后在全屏幕截图上响应鼠标左键按下和抬起事件,最后进行二次截图. import tkinter import tkinter.filedialog import o ...

  3. 服务器主体信息截图,puppeteer实现线上服务器任意区域截图

    整个九月份由于业务繁重以及玩心颇重,一直没有机会来写一篇博文.而且笔者于十月一日将会举办人生大事--婚礼,现在家里筹办过程中只能抽出零碎的时间来写这篇文章. 关于服务端截图,这种使用场景非常少见,大多 ...

  4. Python实现Excel根据指定区域截图(Windows版本)

    # -*- coding:utf-8 -*- __author__ = 'yangxin_ryan' from win32com.client import Dispatch, DispatchEx ...

  5. python解锁电脑屏幕_使用Python解锁计算机屏幕

    要想正常工作,西库里需要用户界面.这意味着用户应该登录. 以下是实现这一目标的步骤: 使用自动登录 您应该重定向控制台,以便随时使用UI在任务调度器中创建新任务 下一步在常规选项卡中检查"以 ...

  6. python tkinter获取屏幕大小_Python使用鼠标滚轮调整tkinter应用程序窗口大小

    图书推荐:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情:用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系统等配套 ...

  7. LINUX选定区域截图

    初学LINUX,记录截图命令,方便自己,方便他人. -------------------------------UBUNTU 16.04------------------------------- ...

  8. 自定义ImageView系列 - 区域截图(下)

    功能要点: - 根据控件自身大小计算合适的透明正方形预览区: - 截取预览区图像并按照指定的尺寸缩放,生成Bitmap对象. 本文着重介绍上述第2个要点. 有关第一个要点的内容,请参阅上一篇文章:请点 ...

  9. 【python】python实现屏幕指定区域文字提取(百度API)

    因为OCR文字识别功能不是特别好,推荐利用百度API的来实现屏幕指定区域的文字识别. 一.如何注册百度API? 1.打开百度api网页,使用百度账号登陆 2.点击控制台,选择文字识别 3.点击创建应用 ...

最新文章

  1. ubuntu18.04安装mongodb
  2. 1、Kubernetes 简介
  3. Python进阶5——切片
  4. Fastjson 1.2.68版本反序列化漏洞分析篇
  5. Java中SeparatedListAdapter类的实现
  6. Python进阶(2)
  7. 简单看java异常栈
  8. 走近分形与混沌(part2)-豪斯多夫维数
  9. 蝗虫算法java代码_蝗虫搜索算法 蝗虫算法:蝗虫优化算法是模拟自然界蝗虫种群捕食行为而提出的一 联合开发网 - pudn.com...
  10. Asp.Net ListView 控件的使用
  11. php 2010excel,PHPExcel在php5.2.10上的bug
  12. Windows获取系统版本号
  13. 什么叫做展望_在迷茫的时代,选择相信:关于2021经济的一些展望。
  14. 大一计算机上机考试模拟试题,计算机等级考试二级上机模拟试题(1)
  15. Java 报表工具选择
  16. CSDN超实用的浏览器插件—去自家网站/搜索广告、超快捷万能搜索、各种实用小功能等诸多功能等你探索
  17. 计算机视觉基础(三)——对极几何中的基本矩阵F和本质矩阵E
  18. 003-Xshell和Xftp连接CentOS
  19. 文件操作——getc()和putc()函数
  20. 经典英文歌曲,爆好听!

热门文章

  1. 安装windows时loading files结束就重启_软网推荐:不用制作系统盘 也能安装新系统...
  2. java文件按时间排序_如何按日期在java目录中排序文件?
  3. eggjs增删改查MySQL_egg-sequelize 实现 增删改查
  4. rpm安装mysql5.6_利用rpm安装mysql 5.6版本详解
  5. mysql重复数据处理_MySQL 处理重复数据
  6. 自动工作负载信息库 AWR
  7. creator图片循环显示_Cocos creator 游戏背景循环滚动--Javascript编写
  8. Java知识点详解 6 注解
  9. 小工厂规章制度_小工厂的规章制度(共8篇).doc
  10. 学习笔记(五)——数据适配器、数据表、数据网格视图控件的综合应用。