购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.3 信号与槽

4.3.1 信号与槽的基本概念

信号(signal)与槽(slot)是Qt的核心机制,也是在进行PyQt6编程时对象之间通信的基础。在PyQt6中,每个QObject对象(包括各种窗口和控件)都支持信号与槽机制,通过信号与槽的关联就可以实现对象之间的通讯,当信号发射时,连接的槽函数(方法)会自动执行。在PyQt6中,信号与槽是通过对象的signal.connect()方法进行连接的。

PyQt6的窗口控件中有很多内置的信号,图4.20展示了MainWindow的部分内置的信号与槽。

在PyQt6中信号与槽的主要特点如下:

☑一个信号可以连接多个槽。

☑一个槽可以监听多个信号。

☑信号与信号之间可以互连。

☑信号与槽的连接可以跨线程。

☑信号与槽的连接方式既可以同步,也可以异步。

☑信号的参数可以是任何Python类型。

图4.20 MainWindow的部分内置的信号与槽

信号与槽的连接工作示意图如图4.21所示。

图4.21 信号与槽的连接工作示意图

4.3.2 编辑信号与槽

要想通过信号与槽实现单击按钮即可关闭主窗口的运行效果,可进行以下操作。

(1)打开Qt Designer设计器,从左侧的工具箱中向窗口中添加一个PushButton按钮,并设置按钮的text属性为“关闭”,如图4.22所示。

图4.22 向窗口中添加一个“关闭”按钮

说明

PushButton是PyQt6提供的一个控件,它是一个命令按钮控件,主要在执行一些单击操作时使用,第5章将详细讲解该控件的使用方法,这里了解即可。

(2)选中添加的“关闭”按钮,在菜单栏中选择“编辑信号/槽”菜单项,接着按住鼠标左键将其拖至窗口空白区域,如图4.23所示。

图4.23 拖动“编辑信号/槽”

(3)松开鼠标后将自动弹出“配置连接”对话框,首先选中“显示从QWidget继承的信号和槽”复选框,然后在上方的信号与槽列表中先后选中“clicked()”和“close()”,接着单击“OK”按钮,如图4.24所示。

图4.24 设置信号与槽

说明

图4.24中选中的clicked()为按钮的信号,之后选中的close()为槽函数,此步骤的工作逻辑是,在单击按钮时发射clicked信号,该信号被主窗口的槽函数close()所捕获,并触发了关闭主窗口的行为。

(4)这样即可完成信号与槽的关联,效果如图4.25所示。

图4.25 设置完成的信号与槽的关联效果

保存.ui文件,并使用PyCharm中配置的PyUIC工具将其转换为.py文件,转换后实现单击按钮关闭窗口的关键代码如下:

按照第3.2.7节的内容为转换后的Python代码添加__main__方法,之后运行程序,效果如图4.26所示,单击“关闭”按钮即可关闭当前窗口。

图4.26 关闭窗口的运行效果

4.3.3 自定义槽

前文介绍了如何将控件的信号与PyQt6内置的槽函数相关联,除此之外,用户还可以自定义槽,自定义槽本质上就是自定义一个函数,再让该函数实现相应的功能。

实例4.1 信号与自定义槽的绑定

实例位置:资源包\Code\04\01

自定义一个槽函数,用于在单击按钮时弹出一个“欢迎进入PyQt6编程世界”信息提示框,代码如下:

说明

上述代码用到了QMessageBox类,该类是PyQt6提供的一个对话框类,第8章将详细讲解该类,这里了解即可。

4.3.4 将自定义槽连接到信号

自定义槽函数后即可与信号进行关联,比如,这里与PushButton按钮的clicked信号相关联,即在单击PushButton按钮时弹出信息提示框,将自定义槽连接到信号的代码如下:

运行程序后,单击窗口中的PushButton按钮即可弹出信息提示框,效果如图4.27所示。

图4.27 将自定义槽连接到信号 tY1TE4mTWIvtaeIvVFv4ZSCvXluTl4k9qTMJKPlrpL2URjvjJD87eU93mhM7xiyW

点击中间区域
呼出菜单
上一章
目录
下一章
×