Python | 人脸识别系统 — UI事件处理

news/2024/11/30 5:53:21/

本博客为人脸识别系统的UI事件处理编写

人脸识别系统博客汇总:人脸识别系统-博客索引

项目GitHub地址:【待】

注意:阅读本博客前请先参考以下博客

工具安装、环境配置:人脸识别系统-简介

UI界面设计:人脸识别系统-UI界面设计

阅读完本博客后可以继续阅读:

摄像头画面展示:人脸识别系统-摄像头画面展示

用户端逻辑:

  • 人脸识别:Python | 人脸识别系统 — 人脸识别
  • 活体检测:Python | 人脸识别系统 — 活体检测
  • 背景模糊:Python | 人脸识别系统 — 背景模糊
  • 姿态检测:Python | 人脸识别系统 — 姿态检测
  • 人脸比对:Python | 人脸识别系统 — 人脸比对
  • 用户操作:Python | 人脸识别系统 — 用户操作

管理员端逻辑:

  • 管理员操作:
  • 用户操作:

一、 按钮触发事件

         创建类 UserMainWindow ,继承PyQt.QMainWindow类 以及 我们自己编写的UI类 UserMainUi 。初始化类方法 __init__() 中使用以下代码进行UI的初始化:

UI类 UserMainUi 类的界面设计部分在博客 UI界面设计  中

    def __init__(self, parent=None):super(UserMainWindow, self).__init__(parent)self.setupUi(self)

        这样,我们就可以在 UserMainWindow 类中使用 self 引用 UserMainUi 类的属性,如按钮、文本域等。按钮的触发事件通过以下方法绑定:

        self.按钮名.clicked.connect(方法名)

        如为按钮 login_button 绑定一个类方法 self.user_login() ,就可以使用下面的代码实现:

        self.login_button.clicked.connect(self.user_login)

二、信号槽

        当我们点击某一个按钮的时候,可能需要使用另一个类的方法或者打开某一个界面(这个界面的逻辑代码在另一个类中),我们就需要使用信号槽。

        信号槽是Qt的一种信息传输机制。当某一个界面发生变化的时候,可能需要通知其他对象进行相应的操作,这时候就使用信号槽机制,将通知的信息进行发射(emit)

        a.创建信号槽

        首先,我们需要在 发送的类中 创建一个信号槽,通过 pyqtSignal() 方法进行创建,如下面的代码创建了一个名为  signal_register (注册)的信号槽:

    signal_register = pyqtSignal()

        b.关联需要通知的对象

        接下来就需要使用信号槽去 关联 我们需要通知的对象,在 main 方法中,我们分别创建了 发送类的对象(如主界面的对象) 以及 接收类的对象(如注册界面的对象),通过如下代码进行连接:

    发送类的对象.信号槽.connect(接收类的对象.show)

       其中 xxx.show() 方法是 Qt 的方法,功能是打开这个界面。具体的代码如下:

if __name__ == "__main__":app = QApplication(sys.argv)# 主界面user_win = UserMainWindow()# 注册界面register = RegisterWindow()# 进行信号槽的连接user_win.signal_register.connect(register.show)# 展示主界面user_win.show()sys.exit(app.exec_())

       c.通过按钮的触发事件发射信号

        通过 emit() 方法实现事件的发射,如下:

    信号槽.emit()

         最后我们结合上面说的按钮触发以及信号槽,实现点击某一个按钮打开某个界面的功能。项目中具体代码如下:

    def __init__(self, parent=None):super(UserMainWindow, self).__init__(parent)self.setupUi(self)self.register_button.clicked.connect(self.send_signal_register)... ...# 发射信号 打开注册用户界面def send_signal_register(self):self.signal_register.emit()

         d.整体结构

# 主界面
class UserMainWindow(QMainWindow, UserMainUi):signal_register = pyqtSignal()  # 用户注册 界面信号def __init__(self, parent=None):super(UserMainWindow, self).__init__(parent)self.setupUi(self)self.register_button.clicked.connect(self.send_signal_register)... ...# 发射信号 打开注册用户界面def send_signal_register(self):self.signal_register.emit()# 注册界面
class RegisterWindow(QMainWindow, RegisterMsgUi):def __init__(self, parent=None):super(RegisterWindow, self).__init__(parent)self.setupUi(self)... ...if __name__ == "__main__":app = QApplication(sys.argv)# 主界面user_win = UserMainWindow()# 注册界面register = RegisterWindow()# 进行信号槽的连接user_win.signal_register.connect(register.show)# 展示主界面user_win.show()sys.exit(app.exec_())

阅读完本博客后可以继续阅读:

摄像头画面展示:人脸识别系统-摄像头画面展示

用户端逻辑:

  • 人脸识别:Python | 人脸识别系统 — 人脸识别
  • 活体检测:Python | 人脸识别系统 — 活体检测
  • 背景模糊:Python | 人脸识别系统 — 背景模糊
  • 姿态检测:Python | 人脸识别系统 — 姿态检测
  • 人脸比对:Python | 人脸识别系统 — 人脸比对
  • 用户操作:Python | 人脸识别系统 — 用户操作

管理员端逻辑:

  • 管理员操作:
  • 用户操作:

注:以上代码仅为参考,若需要运行,请参考项目GitHub完整源代码: 


http://www.ppmy.cn/news/59021.html

相关文章

MyBatis-Plus @TableField详解

TableField 属性类型描述valueString数据库字段名existbooleanexist false 表示该属性不是数据库字段,新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错conditionString预处理 where 实体查询比较条件,有值设置则按设置…

prometheus实战之二:使用常见指标

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《prometheus实战》系列的第二篇,在《prometheus实战之一:用ansible部署》一文咱们部署了prometheus服务&#xff0c…

JAVA常用的异步处理方法总结

前言 在java项目开发过程中经常会遇到比较耗时的任务,通常是将这些任务做成异步操作,在java中实现异步操作有很多方法,本文主要总结一些常用的处理方法。为了简化,我们就拿一个实际的案例,再用每种方法去实现&#xf…

ESP32 ESP-Rainmaker 本地点灯控制Demo测试

基于ESP-Rainmaker 本地点灯控制Demo测试 🌿ESP-Rainmaker项目地址:https://github.com/espressif/esp-rainmaker/tree/master🔰官方所提供的ESP-Rainmaker案例提供了2中配网模式:BLE蓝牙配网和 WIFI AP配网。(本文提供…

Linux网卡没有eth0显示ens33原因以及解决办法

原因 首先说明一下eth0 与 ens33的关系: 目前的主流网卡为使用以太网络协定所开发出来的以太网卡(Ethernet),因此我们Linux就称呼这种网络接口为ethN(N为数字)。举个栗子:就是说主机上面有一张以太网卡,因此主机的网络接口就是et…

HCIA-RS实验-路由配置-配置RIPv1 和RIPv2

书接上回。。。这篇主要以实验为主,实验的主要目标也是理解RIP路由协议的防环机制 ,掌握RIPv1和v2的配置方法;大致拓扑图如下: 拓扑图: 配置对应的IP: R1.2.3 测试R1与R2间的连通性。 配置IP后测试连通性…

Django项目页面样式如何“传给”客户端浏览器

前言 django项目在视图函数中借助render函数可以返回HTML页面,但是HTML页面中如果引入了外部CSS文件或者JavaScript文件在浏览器页面无法加载,因此就必须有一种方式能够将HTML文档中引入的外部文件能够在客户端浏览器上加载,这种方式就是配置…

跨越屏幕:桌面PC端的多端开发框架介绍

目前,随着互联网和移动互联网的发展,多端开发框架已经成为越来越多开发者更好的选择。主要有以下几个方面的前景: 跨平台开发需求不断增加:由于不同平台和设备的差异性,开发人员需要使用不同的编程语言和开发工具来为各…