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

作者:晋升阁 时间:2023-08-07 08:50:03 

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

# # -*- 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://blog.csdn.net/m0_62814033/article/details/124599877

标签:Python,截图,工具
0
投稿

猜你喜欢

  • nodejs利用ajax实现网页无刷新上传图片实例代码

    2024-05-13 10:05:11
  • js中settimeout方法加参数的使用实例

    2024-04-16 09:47:15
  • 详解Django中的FBV和CBV对比分析

    2023-04-30 13:27:38
  • PHP数据类型之布尔型的介绍

    2023-11-14 21:56:00
  • 元组列表字典(莫烦python基础)

    2022-03-23 09:15:58
  • Python中and和or如何使用

    2022-04-27 18:01:49
  • mysql时区查看与设置方法

    2024-01-20 02:01:46
  • php中debug_backtrace、debug_print_backtrace和匿名函数用法实例

    2023-06-11 23:08:24
  • python实现bucket排序算法实例分析

    2023-09-17 17:54:07
  • 找到个很好的例子导出excel的

    2008-09-28 13:12:00
  • Python与CNN的碰撞详解

    2023-01-09 13:21:12
  • Vue 3.x+axios跨域方案的踩坑指南

    2024-05-09 09:21:15
  • python的debug实用工具 pdb详解

    2021-04-16 10:31:17
  • 一文搞懂MySQL元数据锁(MDL)

    2024-01-14 18:29:08
  • python实现通过代理服务器访问远程url的方法

    2023-03-14 00:47:38
  • Python利用memory_profiler实现内存分析

    2022-10-02 12:41:45
  • vue.js实现价格格式化的方法

    2024-05-10 14:20:06
  • Python实现截屏的函数

    2022-03-12 01:46:53
  • 详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式

    2022-02-12 06:30:45
  • vue+electron实现创建多窗口及窗口间的通信(实施方案)

    2024-04-30 10:44:05
  • asp之家 网络编程 m.aspxhome.com