前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python实现计算机屏幕任意区域截图

Python实现计算机屏幕任意区域截图

作者头像
Python小屋屋主
发布于 2018-04-16 06:44:21
发布于 2018-04-16 06:44:21
6.1K0
举报
文章被收录于专栏:Python小屋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()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用python实现选择截图区域
一直想用python实现一个类似QQ截图的功能,但不直接截图,而是返回截图的区域,以下是代码
py3study
2020/01/10
3.8K0
Python+tkinter+pillow实现屏幕任意区域截图
基本思路:首先获取并显示全屏幕截图,然后在全屏幕截图上响应鼠标左键按下和抬起事件,最后进行二次截图。 import tkinter import tkinter.filedialog import os from PIL import ImageGrab from time import sleep root = tkinter.Tk() #设置窗口大小与位置 root.geometry('100x40+400+300') #设置窗口大小不可改变 root.resizable(False, False) #
Python小屋屋主
2018/04/16
8.1K3
过分了,别人用来做桌面应用开发,这家伙却用来撩妹(6)-隐形的弹窗
在前面已经学习了很多,制作弹窗的方式,但是没有一个透明的弹窗。这次我们来做一个透明的弹窗好了。如图,先来感受一下。
大家一起学编程
2021/09/18
8560
过分了,别人用来做桌面应用开发,这家伙却用来撩妹(6)-隐形的弹窗
Python实现屏幕取色器功能
代码主要思路:首先获取全屏幕截图,在截取的图像上获取指定位置的像素颜色值并转换为十六进制表示形式。 遗憾之处:这个程序的部分代码比较长,在手机上查看时这些换行可能会影响阅读质量,记得之前有个朋友提过建议让我加上代码块,不过我试了试,微信公众号后台的编辑器不支持这个功能,网上找了几个编辑器也不太好用。如果有朋友知道简单易用的支持代码块的编辑器还请推荐一下,谢谢! import os from time import sleep import tkinter import tkinter.filedialog
Python小屋屋主
2018/04/17
7.8K3
Python: 屏幕取色器(识别屏幕上不同位置的颜色)
文章背景:工作中,有时候需要判断图片中不同位置的颜色。有些颜色不太容易区分,所以想通过Python编写代码,通过屏幕取点,获取某个位置的颜色值。
Exploring
2022/09/20
5.2K0
Python:  屏幕取色器(识别屏幕上不同位置的颜色)
基于tkinter的GUI编程
tkinter:tkinter是绑定了Python的TKGUI工具集,就是Python包装的Tcl代码,通过内嵌在Python解释器内部的Tcl 解释器实现的,它是Python标准库的一部分,所以使用它进行GUI编程不需要另外安装第三方库的。
py3study
2020/01/16
5.6K0
基于tkinter的GUI编程
python-tkinter 实现各种个样的撩妹鼠标拖尾
系统的拖尾已经无法满足我们了,女朋友叫你把鼠标拖尾换成她的照片,让你时时刻刻都可以看见她,这个要求你答不答应。
大家一起学编程
2021/09/18
7240
python-tkinter 实现各种个样的撩妹鼠标拖尾
Python使用tkinter打造自定义对话框完整代码
问题来源:前一阵发过一个技术文章Python编写抽奖式随机提问程序,其中有个弹出式对话框,好像上海科技大学宋老师在群里当时问了一句对话框中中奖姓名是否能显示的大一些,如图: 当时记得标准的tkinte
Python小屋屋主
2018/04/16
3.1K0
Python使用tkinter打造自定义对话框完整代码
Python实现局域网内屏幕广播的技术要点分析
为更好地保证教学质量和提高学生的学习积极性,我使用Python开发了一套课堂教学管理系统,具有在线点名、在线答疑、随机提问、在线作业管理、在线自测、在线考试、数据汇总、试卷生成、屏幕广播等功能,教师端
Python小屋屋主
2018/04/16
1.5K0
Python实现局域网内屏幕广播的技术要点分析
Python写一个像QQ可快捷键唤起区域截屏的应用
1).首先要能响应快捷键调起截屏程序,像QQ使用Ctrl+shift+B可以截屏一样;
一墨编程学习
2019/05/30
2.4K1
python截图识别文字_python截图并转换文字「建议收藏」
本文主要介绍了使用pyHook、pythoncom、pytesseract、PIL、win32api等module实现python的截图识别文字功能。
全栈程序员站长
2022/08/13
3.3K0
python截图识别文字_python截图并转换文字「建议收藏」
python3 五子棋(tkinter)
BOARD_WIDTH = 535 BOARD_HEIGHT = 536 BOARD_SIZE = 15
用户5760343
2019/12/12
1K0
python tkinter 简单实例
# 1920*1080    表示在屏幕在宽度上上有1920个点, 高度上有1080个点
用户7886150
2020/12/28
2.5K0
Python|用tkinter实现自定义记事本
Python中我们通常使用tkinter来进行UI界面的编写,本文我们来使用tkinter实现自定义记事本。
数据山谷
2022/04/12
1.5K0
Python|用tkinter实现自定义记事本
tkinter: 事件 & 绑定 (Events and Bindings)
目的 tkinter 获取 键盘输入 与 鼠标输入 。 实现代码 # coding=utf-8 import tkinter as tk root = tk.Tk() def center_window(w, h): # 获取屏幕 宽、高 ws = root.winfo_screenwidth() hs = root.winfo_screenheight() # 计算 x, y 位置 x = (ws/2) - (w/2) y = (hs/2) - (
JNingWei
2018/09/28
7610
Python 图形化界面基础篇:处理鼠标事件
在 Python 图形用户界面( GUI )应用程序开发中,处理鼠标事件是一项重要的任务。鼠标事件包括点击、双击、移动、释放等操作,通过捕获这些事件,你可以实现各种交互功能,如绘图、拖放、点击按钮等。在本文中,我们将深入研究如何使用 Python 的 Tkinter 库来处理鼠标事件,并演示如何在应用程序中实现一些常见的鼠标交互功能。
小蓝枣
2023/09/17
1.2K0
Python 图形化界面基础篇:处理鼠标事件
python canvas 拖拽和移动\事件
""" draw elastic shapes on a canvas on drag, move on right click; see canvasDraw_tags*.py for extensions with tags and animation """
用户5760343
2022/05/13
1K0
python canvas 拖拽和移动\事件
python tkinter 设计指南
pack() 是一种较为简单的布局方法,在不使用任何参数的情况下,它会将控件以添加时的先后顺序,自上而下,一行一行的进行排列,并且默认居中显示。pack() 方法的常用参数如下所示:
独元殇
2023/03/21
7K0
Tkinter教程(每天半小时,3天彻底掌握Tkinter)day2
grid() 方法相比 pack() 方法来说要更加灵活,以网格的方式对组件进行布局管理,让整个布局显得非常简洁、优雅。
红目香薰
2022/11/30
4.1K0
Tkinter教程(每天半小时,3天彻底掌握Tkinter)day2
python-tkinter(7) 实现各种个样的撩妹鼠标拖尾
系统的拖尾已经无法满足我们了,女朋友叫你把鼠标拖尾换成她的照片,让你时时刻刻都可以看见她,这个要求你答不答应。
全栈程序员站长
2022/07/19
7280
python-tkinter(7) 实现各种个样的撩妹鼠标拖尾
相关推荐
用python实现选择截图区域
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档