IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 自定义截屏,pynput监听键盘和鼠标 -> 正文阅读

[开发工具]自定义截屏,pynput监听键盘和鼠标

自学python的我最近想写一个能自定义的截屏程序,于是就有了下面的。主要是用来pynput库,用这个来监听键盘真是太简单了。

代码可能存在bug,结构不是最优的,欢迎大家指出。

# @IDE                :PyCharm
# @Author             :强哥
# @Date               :2022/2/2 14:50
import pynput
import pyautogui
import time
import tkinter as tk
import threading
from tkinter import messagebox
import winsound


def thread_it(func, *args):
    t = threading.Thread(target=func, args=args)
    # 守护线程
    t.setDaemon(True)
    # 启动线程
    t.start()


def func():
    #监听鼠标
    with pynput.mouse.Listener(on_click=on_click) as df1:
        df1.join()


def on_press(key):
    global l
    #显示键盘按下按键
    # print(str(key))
    
    if str(key) == r"'\x11'":#组合键CTRL+Q
        #添加在屏幕最上层蒙版
        l = tk.Toplevel(root, width=1920, height=1080)#屏幕大小1920x1080
        #消除窗口的最上端
        l.overrideredirect(True)
        #使窗口的颜色接近透明,0.01是我随便试的
        l.attributes('-alpha', 0.01)
        #进入截屏函数
        func()
        #若返回False,就会跳出函数hh()中的df.join()
        return False


def outt():
    exit()


def on_click(x, y, button, pressed):
    global h, x0, y0, x1, y1
    if h == 0:#鼠标左键按下
        #鼠标的坐标
        x0, y0 = x, y
        h = 1
    elif h == 1:#鼠标左键抬起
        x1, y1 = x, y
        #截图
        img = pyautogui.screenshot(region=[x0, y0, x1 - x0, y1 - y0])  # x,y,w,h
        #获取截图的时间
        n_time = time.strftime("%Y-%m-%d %H:%m:%S", time.localtime()).replace(' ', '_').replace(':', '')
        img.save("D:\桌面\{}截屏.jpg".format(n_time))
        #保存好后提示
        winsound.Beep(freq, duration)
        # print("截好屏了")
        #坐标初始化
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = 0
        h = 0
        #False跳出func函数中的df1.join()
        return False


def ma():
    #删除组件fr
    fr.destroy()
    #窗口最小化
    root.iconify()
    #窗口置顶
    root.wm_attributes('-topmost', 1)
    bt1 = tk.Button(root, text="退出", command=outt, font="黑体", width=10)
    bt1.pack()
    hh()


def hh():
    #开始监听键盘,转到函数on_press()
    with pynput.keyboard.Listener(on_press=on_press) as df:
        df.join()
    #删除蒙版
    l.destroy()
    hh()


if __name__ == '__main__':
    duration = 300  # 毫秒
    freq = 300  # Hz
    #弹窗提示
    root1 = tk.Tk()
    root1.withdraw()
    messagebox.showinfo("注意", "截图的快捷键是CTRL+Q,截图保存在桌面。")

    h = 0
    #截图坐标的初始化
    x0 = 0
    y0 = 0
    x1 = 0
    y1 = 0
    
    #创建交互窗口
    root = tk.Tk()
    root.geometry('80x30+0+0')
    root.title('截屏')
    fr = tk.Frame(root)
    fr.pack()
    bt = tk.Button(fr, text="开始", bg='red', command=lambda: thread_it(ma), font="黑体", width=10)
    bt.pack()
    # root.wm_attributes('-topmost', 1)
    #窗口大小不可改变
    root.resizable(0, 0)
    root.mainloop()

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:14:24  更:2022-02-04 11:16:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:13:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码