本博客为人脸识别系统的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完整源代码: