资讯专栏INFORMATION COLUMN

利用Python实现一个简易的截图工具

89542767 / 562人阅读

  小编写这篇文章的一个主要目的,主要是利用Python去制作截图工具,当然,这个截图工具是比较的简易的,那么,具体的一个制作步骤是什么呢?下面就给大家详细解答下。


  这是工作期间同事想要个截完图之后可以显示并且永远前置的截图小工具(即不会被其他程序覆盖)直接上代码:


  ##-*-coding:utf-8-*-
  import tkinter as tk
  import pyautogui
  import tkinter
  from PIL import ImageTk
  from PIL import Image
  root=tk.Tk()
  root.wm_attributes('-topmost',1)
  root.overrideredirect(True)#隐藏窗口的标题栏
  #root.attributes("-alpha",0.3)#窗口透明度70%
  root.attributes("-alpha",0.4)#窗口透明度60%
  #root.geometry("300x200+10+10")#设置窗口大小与位置
  root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(),root.winfo_screenheight()))
  root.configure(bg="blue")
  #当工具条
  canvas=tk.Canvas(root)
  canvas.configure(width=300)
  canvas.configure(height=100)
  canvas.configure(bg="yellow")
  canvas.configure(highlightthickness=0)#高亮厚度
  canvas.place(x=(root.winfo_screenwidth()-500),y=(root.winfo_screenheight()-300))
  canvas.create_text(150,50,font='Arial-20 bold',text='ESC退出,假装工具条')
  #再创建1个Canvas用于圈选
  cv=tk.Canvas(root)
  x,y=0,0
  xstart,ystart=0,0
  def move(event):
  global x,y,xstart,ystart
  new_x=(event.x-x)+canvas.winfo_x()
  new_y=(event.y-y)+canvas.winfo_y()
  s="300x200+"+str(new_x)+"+"+str(new_y)
  canvas.place(x=new_x-xstart,y=new_y-ystart)
  print("s=",s)
  print(root.winfo_x(),root.winfo_y())
  print(event.x,event.y)
  #鼠标左键按下
  def button_1(event):
  global x,y,xstart,ystart
  x,y=event.x,event.y
  xstart,ystart=event.x,event.y
  print("event.x,event.y=",event.x,event.y)
  xstart,ystart=event.x,event.y
  cv.configure(height=1)
  cv.configure(width=1)
  cv.place(x=event.x,y=event.y)
  #鼠标左键按下并移动
  def b1_Motion(event):
  global x,y
  x,y=event.x,event.y
  print("event.x,event.y=",event.x,event.y)
  cv.configure(height=event.y-ystart)
  cv.configure(width=event.x-xstart)
  #鼠标左键松开
  def buttonRelease_1(event):
  global x,y,xstart,ystart
  x,y=event.x,event.y
  print("event.x,event.y=",event.x,event.y)
  Pstart=[0,0]
  cv.place_forget()
  img=pyautogui.screenshot(region=[xstart,ystart,x-xstart,y-ystart])#x,y,w,h
  img.save('screenshot.png')
  #退出
  def sys_out(even):
  root.destroy()
  func()
  #绑定事件
  canvas.bind("<B1-Motion>",move)
  #绑定事件到Esc键,当按下Esc键就会调用sys_out函数,弹出对话框
  root.bind('<Escape>',sys_out)
  root.bind("<Button-1>",button_1)
  root.bind("<B1-Motion>",b1_Motion)
  root.bind("<ButtonRelease-1>",buttonRelease_1)
  img_png=None
  def func():
  root1=tk.Tk()
  root1.wm_attributes('-topmost',1)
  img_open=Image.open("screenshot.png")
  global img_png
  img_png=ImageTk.PhotoImage(img_open)
  label_img=tk.Label(root1,image=img_png)
  label_img.pack()
  root.mainloop()


  具体用法是运行程序、选中区域(支持多次选定,以最后一次选定为主)、按esc完成截图同时弹出永远前置的截图照片窗体。


  我打包了发给同事同事说很好用,就是差个快捷键。


  其实也很简单,只须打包成exe程序后右击属性中设置快捷键即可~


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来一定帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128424.html

相关文章

  • 微信公号DIY:MongoDB 简易ORM & 公号记账数据库设计

    摘要:然后又介绍了基于的公号账本应用的数据库设计。欢迎关注公号四月试用。 前两篇 微信公号DIY 系列: 微信公号DIY:一小时搭建微信聊天机器人 微信公号DIY:训练聊天机器人&公号变身图片上传工具 介绍了如何使用搭建&训练聊天机器人以及让公号支持图片上传到七牛,把公号变成一个七牛图片上传客户端。这一篇将继续开发公号,让公号变成一个更加实用的工具账本(理财从记账开始)。 代码: 项目代...

    Backache 评论0 收藏0
  • 微信公号DIY:MongoDB 简易ORM & 公号记账数据库设计

    摘要:然后又介绍了基于的公号账本应用的数据库设计。欢迎关注公号四月试用。 前两篇 微信公号DIY 系列: 微信公号DIY:一小时搭建微信聊天机器人 微信公号DIY:训练聊天机器人&公号变身图片上传工具 介绍了如何使用搭建&训练聊天机器人以及让公号支持图片上传到七牛,把公号变成一个七牛图片上传客户端。这一篇将继续开发公号,让公号变成一个更加实用的工具账本(理财从记账开始)。 代码: 项目代...

    DoINsiSt 评论0 收藏0
  • 端到端测试哪家强?不容错过Cypress

    摘要:阅读原文目前测试工具有哪些项目不需要不需要端到端测试一般都需要一个容器,来运行前端应用。向快速,一致和可靠的无剥落测试问好。 阅读原文 1. 目前E2E测试工具有哪些? 项目 Web Star puppeteer Chromium (~170Mb Mac, ~282Mb Linux, ~280Mb Win) 31906 nightmare Electron 15502 ...

    LancerComet 评论0 收藏0
  • Vuejs自己构建工具

    摘要:然而,这些模板并不限制你自己对于使用的架构组织和选择类库。目前可用的模板包括全功能的,包括热加载,静态检测,单元测试一个简易的,以便于快速开始。 最近, 尤大在和人对喷的时候,悄然放出了一个大招,于是为了追赶他的步伐,赶紧试验了下,并且把原文给大家翻译下。 原文地址:Announcing vue-cli 译文源地址: Vuejs自己的构建工具 先上原文翻译: 最近有很多大量关于Reac...

    leoperfect 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<