zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    获取其他进程中StatusBar的文本
    TStringGrid多选的复制与拷贝
    常用数据结构
    数据结构及算法
    时间复杂度和空间复杂度详解
    算法的时间复杂度和空间复杂度
    新增并管理媒体资源
    Node.js与MongoDB的基本连接示例
    Web API 2:Action的返回类型
    快递查询组件
  • 原文地址:https://www.cnblogs.com/pu369/p/12700781.html
Copyright © 2011-2022 走看看