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

博客汇总:Python | 人脸识别系统 — 博客索引

GitHub地址:Su-Face-Recognition

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

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

UI界面设计:Python | 人脸识别系统 — UI界面设计

一、 按钮触发事件

         创建类 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 | 人脸识别系统 — 摄像头画面展示

用户端逻辑:

管理员端逻辑:

注:以上代码仅供参考,如需运行,参考GitHub源代码: Su-Face-Recognition

猜你喜欢

转载自blog.csdn.net/sun80760/article/details/130492487