python+tkinter+pyautogui 自制截屏软件

Posted pu369com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python+tkinter+pyautogui 自制截屏软件相关的知识,希望对你有一定的参考价值。

目标:虽然类似QQ等软件带有截屏功能,但还是感觉自造的好

使用说明:将以下代码保存为如:截屏.pyw    并发送到 桌面快捷方式  然后修改快捷方式的属性 增加快捷键。

现在可以用快捷键启动脚本截屏了。

然而:win10自带的  “Win+Shift+S”组合键便可进入截屏模式

代码:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk
import pyautogui

root = tk.Tk()
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):
    #from tkinter import messagebox
    #if messagebox.askokcancel(‘Exit‘,‘Confirm to exit?‘):
    root.destroy()

# 绑定事件
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)
root.mainloop()

 

以上是关于python+tkinter+pyautogui 自制截屏软件的主要内容,如果未能解决你的问题,请参考以下文章

pyautogui.keydown()没有在python的bind()函数中注册为事件吗?

Python pyautogui

Python 安装pyautogui

如何修复 Python 3 PyAutoGUI 屏幕截图错误? (苹果系统)

Python-pyautogui模块

python安装pyautogui时遇到Pillow问题