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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM