一直想用python实现一个类似QQ截图的功能,但不直接截图,而是返回截图的区域,以下是代码# -*- coding:utf-8 -*-

import tkinter

import tkinter.filedialog

import os

from PIL import ImageGrab

from time import sleep

from tkinter import StringVar, IntVar

#创建tkinter主窗口

root = tkinter.Tk()

#指定主窗口位置与大小

root.geometry('200x80+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)

self.selectPosition=None

#屏幕尺寸

screenWidth = root.winfo_screenwidth()

#print(screenWidth)

screenHeight = root.winfo_screenheight()

#print(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.p_w_picpath = tkinter.PhotoImage(file=png)

self.canvas.create_p_w_picpath(screenWidth//2, screenHeight//2, p_w_picpath=self.p_w_picpath)

#鼠标左键按下的位置

def onLeftButtonDown(event):

self.X.set(event.x)

self.Y.set(event.y)

#开始截图

self.sel = True

self.canvas.bind('', 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('', onLeftButtonMove)

#获取鼠标左键抬起的位置,保存区域截图

def onLeftButtonUp(event):

self.sel = False

try:

self.canvas.delete(lastDraw)

except Exception as e:

pass

sleep(0.1)

#考虑鼠标左键从右下方按下而从左上方抬起的截图

myleft, myright = sorted([self.X.get(), event.x])

mytop, mybottom = sorted([self.Y.get(), event.y])

self.selectPosition=(myleft,myright,mytop,mybottom)

#             pic = ImageGrab.grab((left+1, top+1, right, bottom))

#

#             #弹出保存截图对话框

#

#             fileName = tkinter.filedialog.asksaveasfilename(title='保存截图', filetypes=[('JPG files', '*.jpg')])

#

#             if fileName:

#

#                 pic.save(fileName+'.jpg')

#关闭当前窗口

#print(left, '  ', top,'  ',right,'  ',bottom)

self.top.destroy()

self.canvas.bind('', onLeftButtonUp)

self.canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES)

#开始截图

text = StringVar()

text.set('old')

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)

text.set(str(w.selectPosition))

#print(w.myleft,w.mybottom)

#截图结束,恢复主窗口,并删除临时的全屏幕截图文件

#label.config(text='Hello')

root.state('normal')

os.remove(filename)

label=tkinter.Label(root,textvariable=text)

label.place(x=10, y=30, width=160, height=20)

label.config(text='New test')

buttonCapture = tkinter.Button(root, text='截图', command=buttonCaptureClick)

buttonCapture.place(x=10, y=10, width=160, height=20)

#启动消息主循环

#root.update()

root.mainloop()

python制作指定区域截图工具_用python实现选择截图区域相关推荐

  1. python 代码行数统计工具_使用Python设计一个代码统计工具

    问题 设计一个程序,用于统计一个项目中的代码行数,包括文件个数,代码行数,注释行数,空行行数.尽量设计灵活一点可以通过输入不同参数来统计不同语言的项目,例如: # type用于指定文件类型 pytho ...

  2. python制作浏览器 脚本之家_基于Python打造账号共享浏览器功能

    本篇文章介绍的内容会涉及到以下知识: PyQt5的使用; Selenium的使用; 代理服务器的架设和使用: 一.账号限制之痛 在如今的互联网中,免费的信息和资源占据了很大一部分,各类互联网应用提供了 ...

  3. python制作的炫酷动画_用Python一键生成炫酷九宫格图片,火了朋友圈

    作为一个男同胞来说,为了给女朋友拍一张美美的照片,着实需要花费很大的时间和精力,不仅仅需要从众多的图片中精心挑选,而且还需要有着超强的图片精修能力,才能得到一张张达到女友要求的图片,真心不容易啊- 朋 ...

  4. python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用

    注:本文所指的YUV均为YUV420中的I420格式(最常见的一种),其他格式不能用以下的代码. 位深为8bit时,每个像素占用1字节,对应文件指针的fp.read(1): 位深为10bit时,每个像 ...

  5. 利用python制作漂亮的词云图_利用python制作词云,wordcloud神器你值得拥有

    相信许多人都看到过下面这样的词云图,词云图是一种很好的可视化工具,其作用主要是为了文本数据的视觉表示,既酷炫又能突出重点. 关于词云图的制作,网上能够搜集到很多的教程,许多都是利用了专用的工具,这些工 ...

  6. python替换指定位置word图片_用Python在word的指定位置插入图片(使用Python-docx包)...

    1 2 首先,本实例是采用java语言的,需要进行xml操作,至于poi,docx4j这些,因为感觉不是文档不太好,要嘛就是操作不方便,而且英文就算了,主要是注释很少,让人云里雾里的.所以,嘿嘿,直接 ...

  7. python制作表白软件手机版_用Python做一个情人节表白神器

    思路来自于「Python 编程时光」,我在其之上改进了一下,主要是通过tkinter编写一个界面方便使用,大家可以关注「Python 编程时光」这一良心公众号. 本文最后给出了打包好的软件,无需安装P ...

  8. 用python制作的游戏有哪些_用 Python 做个简单的井字游戏

    在这个教程中,我将展示如何利用Python来做一个井字游戏.这将包括函数.列表.if语句.while循环.for循环以及错误处理等等. 首先,我们将创建两个函数,第一个函数将会打印出井字游戏的背景模板 ...

  9. python可以做哪些小工具_用Python写过哪些「脑洞大开」的小工具?

    造数 - 今天教你用Python 来随机写诗 思路很简单:从唐诗三百首中获取最常使用的汉字,然后在这些汉字中拿出一些组成新"诗". 看看出来了什么诗 空女寒国乐,已照柳落声. 自夫 ...

  10. 利用python制作漂亮的词云图_利用python制作漂亮的词云图

    新建一个新的目录 随便找个地方新建一个目录,比如我在F盘下面新建一个word_cloud文件夹(名字都是随便取),并且打开这个文件夹. 把刚刚下载的msyh.ttc复制到这里. 新建一个my_word ...

最新文章

  1. python 为什么每次代码运行时间不同-python – 气流在同一个dag的不同时间运行任......
  2. 深度学习核心技术精讲100篇(五十三)-机器学习中的隐私保护
  3. HTML基础_Day01
  4. 《实践与思考》系列连载(5)——问答Hprose,以及关于技术与开源的思考
  5. Zabbix3.2.6之通过JMX监控Tomcat
  6. C#中gridView常用属性和技巧介绍
  7. 2D 转换之 scale
  8. Ant的使用 - 简单介绍
  9. No rule to make target `/usr/lib/arm-linux-gnueabihf/libopencv_videostab.so.2.4.8'
  10. RESTful规范1
  11. 查看sql语句的执行计划
  12. 四旋翼飞行器避障系统基础
  13. 爬取今日头条新闻,并导入execle中(主要用了selenium)
  14. win10不兼容 软件 ietest
  15. 几万年前,孙悟空的一次删库跑路...
  16. 法律人工智能的前世今生,附熊明辉教授简历(公号回复“法律AI”或“熊明辉AI”下载PDF典型资料,欢迎转发、赞赏支持科普)
  17. c# 使用System.Media.SoundPlayer播放wav格式的声音文件
  18. access查询出生日期格式转换_设置日期和时间字段的格式
  19. C++共享指针的父类和子类转化
  20. 分析Crash report

热门文章

  1. 微信小程序web-view的H5页面如何使用微信直播功能
  2. filmimpact安装教程_【更新】Premiere Pro CC 转场插件:FilmImpact 1 FilmImpact 2 v3.0.2
  3. html菜单栏向左展开与收起,网页左侧固定菜单栏的展开与收起
  4. 技术架构图-Java技术栈
  5. 怎样统计PPT演示文稿的字数
  6. 修复win10右键卡死鼠标转圈
  7. 关于CAD选择集的一些用法
  8. scara机器人用户坐标系标定与工具坐标(TCP)标定
  9. cmd命令行激活win7
  10. 鸿蒙系统图标大小怎么调节,华为手机桌面图标大小怎么调?用华为手机的朋友这些技巧需要了解...