python --截图工具

截图工具

keyboard==0.13.5
loguru==0.6.0
Pillow==9.5.0
PyAutoGUI==0.9.54
pywin32==306
requests==2.31.0
import time
import tkinter as tk
from tkinter import Canvas

import keyboard
import pyautogui
import winreg
import os


def get_desktop():
    '''获取桌面路径'''
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
                         r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
    return winreg.QueryValueEx(key, "Desktop")[0]


def on_alt_q():
    global ctrl_q_pressed
    ctrl_q_pressed = True
    # 移除键盘监听
    # keyboard.unhook_all()
    root = tk.Tk()
    ScreenshotTool(root)
    root.mainloop()

# 标记是否按下了 alt + q
ctrl_q_pressed = False
desktop_path = get_desktop() # 桌面路径

class ScreenshotTool:
    def __init__(self, root):
        self.root = root
        self.root.attributes('-fullscreen', True)
        self.root.attributes('-topmost', 1)
        self.root.attributes('-alpha', 0.5)
        self.root.bind('', self.on_press)
        self.root.bind('', self.on_drag)
        self.root.bind('', self.on_release)

        self.canvas = Canvas(root, bg='black')
        self.canvas.pack(fill=tk.BOTH, expand=True)

        # 获取屏幕尺寸
        screen_width = root.winfo_screenwidth() - 2
        screen_height = root.winfo_screenheight() - 2

        # 绘制全屏边框,设置线宽为 3 实现加粗效果
        self.canvas.create_rectangle(1, 1, screen_width, screen_height, outline='red', width=3)

        self.start_x = None
        self.start_y = None
        self.rect = None

    def on_press(self, event):
        self.start_x = event.x
        self.start_y = event.y
        if self.rect:
            self.canvas.delete(self.rect)

    def on_drag(self, event):
        self.canvas.delete(tk.ALL)
        if self.start_x and self.start_y:
            if self.rect:
                self.canvas.delete(self.rect)
            x1, y1 = self.start_x, self.start_y
            x2, y2 = event.x, event.y
            self.rect = self.canvas.create_rectangle(x1, y1, x2, y2, outline='red', width=2)

    def on_release(self, event):
        x1, y1 = self.start_x, self.start_y
        x2, y2 = event.x, event.y
        left = min(x1, x2)
        top = min(y1, y2)
        right = max(x1, x2)
        bottom = max(y1, y2)
        self.root.destroy()

        screenshot = pyautogui.screenshot(region=(left, top, right - left, bottom - top))
        filename = os.path.join(desktop_path, f'{int(time.time())}.jpg')
        screenshot.save(filename)


if __name__ == "__main__":
    keyboard.add_hotkey('alt+q', on_alt_q)
    keyboard.wait()

你可能感兴趣的:(python,开发语言)