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()
  • 相关阅读:
    Android事件详解——拖放事件DragEvent
    Android 用户界面---拖放(Drag and Drop)(三)
    Android 用户界面---拖放(Drag and Drop)(二)
    Android 用户界面---拖放(Drag and Drop)(一)
    Android开发者指南-用户界面-拖放-Drag and Drop[原创译文]
    Android L动画入门
    基本介绍LINUX远程PC软件:PUTTY、SecureCRT、X-Manager
    js字的数目的计算方法(与word计算公式为)
    动机,努力工作,提高能力,提高战斗力,要注意保暖,维护创业热情。
    pig询问top k,每个返回hour和ad_network_id最大的两个记录(SUBSTRING,order,COUNT_STAR,limit)
  • 原文地址:https://www.cnblogs.com/pu369/p/12700781.html
Copyright © 2011-2022 走看看