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()
  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/pu369/p/12700781.html
Copyright © 2011-2022 走看看