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

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值