【PyQt6]全屏截图实现的带密码锁屏功能

2024-02-17 07:20

本文主要是介绍【PyQt6]全屏截图实现的带密码锁屏功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 简介
  • 2. Demo

1. 简介

书接上回,PyQt6 使用 QScreen 实现了截图,如果用个控件全屏显示截图,嘿嘿,那就是简单的一个锁屏界面了,类似于一个假死界面,也挺有意思。
友情提醒 输入 quit 可以退出程序

2. Demo

使用一个加密的功能,让 quit 不是以铭文出现
dbd73c2b545209688ed794c0d5413d5a 是 quit的md5码
md5 据说可以被破解,那就还可以改成 使用 bcrpypt ,不停变更 bcrpypt 密钥,会更有意思

友情提醒,退出 是输入 quit 退出 是输入 quit 退出 是输入quit

在这里插入图片描述

from PyQt6.QtCore import Qt
from PyQt6.QtGui import QKeyEvent, QPainter, QPaintEvent, QColor
from PyQt6.QtWidgets import QApplication, QWidget
import hashlib
# from cout import coutclass FullScreen(QWidget):def __init__(self):"""构造函数无框 顶部显示, 任务栏不显示输入:quitAttrition:self.pixmap : 主屏幕的截图self.bufs   : 字符串缓存"""super(FullScreen, self).__init__()# ------------- 窗口标志设置  -------------self.setWindowFlags(Qt.WindowType.WindowStaysOnTopHint| Qt.WindowType.FramelessWindowHint| Qt.WindowType.Tool)       # 可以不出现在任务栏screen = QApplication.primaryScreen()self.pixmap = screen.grabWindow()self.bufs = []  # 用来保存 输入的字符def paintEvent(self, a0: QPaintEvent | None) -> None:painter = QPainter(self)painter.drawPixmap(a0.rect(), self.pixmap)painter.fillRect(a0.rect(), QColor(0, 0, 255, 127))font = painter.font()font.setFamily("楷体")font.setPixelSize(20)painter.setFont(font)painter.setPen(QColor(255, 0, 0))msg = '输入 quit 退出'painter.drawText(20, 30, msg)rect_ad = a0.rect().adjusted(10, 10, -10, -10)painter.drawRect(rect_ad)painter.drawText(rect_ad,Qt.AlignmentFlag.AlignCenter | Qt.TextFlag.TextWrapAnywhere,''.join(self.bufs))return super().paintEvent(a0)# ===============  按键事件 ===============def keyPressEvent(self, a0: QKeyEvent | None) -> None:keycode = a0.key()if keycode <= 0x10ffff:# char = chr(keycode)# cout((keycode, char))self.bufs.append(a0.text())match a0.key():case Qt.Key.Key_Escape:self.bufs = self.bufs[:-1]  # 去掉最后一个 esc 字符self.bufs.append('请输入密码 🚶')case Qt.Key.Key_Enter | Qt.Key.Key_Return:bufs_str = ''.join(self.bufs).strip().encode(encoding='utf-8')md5 = hashlib.md5(bufs_str).hexdigest()if md5.casefold() == 'dbd73c2b545209688ed794c0d5413d5a'.casefold():# if bufs_str.strip().casefold() == 'quit'.casefold():app.quit()self.bufs.clear()self.update()if __name__ == '__main__':app = QApplication([])screen = FullScreen()screen.showFullScreen()# cout(screen.rect())app.exec()

这篇关于【PyQt6]全屏截图实现的带密码锁屏功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717074

相关文章

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

Java实现MD5加密的四种方式

《Java实现MD5加密的四种方式》MD5是一种广泛使用的哈希算法,其输出结果是一个128位的二进制数,通常以32位十六进制数的形式表示,MD5的底层实现涉及多个复杂的步骤和算法,本文给大家介绍了Ja... 目录MD5介绍Java 中实现 MD5 加密方式方法一:使用 MessageDigest方法二:使用

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

Java实现将Markdown转换为纯文本

《Java实现将Markdown转换为纯文本》这篇文章主要为大家详细介绍了两种在Java中实现Markdown转纯文本的主流方法,文中的示例代码讲解详细,大家可以根据需求选择适合的方案... 目录方法一:使用正则表达式(轻量级方案)方法二:使用 Flexmark-Java 库(专业方案)1. 添加依赖(Ma

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

《Mybatis从3.4.0版本到3.5.7版本的迭代方法实现》本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考... 目录一、3.4.01、主要的功能增强2、selectCursor example3、不兼容的更改二、

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu