1  信号与槽的基本概念


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

PyQt5的窗口控件中有很多内置的信号,例如,如图所示为MainWindow主窗口的部分内置信号与槽。

Pasted image 20250827142539

PyQt5中使用信号与槽的主要特点如下:

  • 一个信号可以连接多个槽。
  • 一个槽可以监听多个信号。
  • 信号与信号之间可以互连。
  • 信号与槽的连接可以跨线程。
  • 信号与槽的连接方式即可以是同步,也可以是异步。
  • 信号的参数可以是任何的Python类型。

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

Pasted image 20250827142753

2  编辑信号与槽


例如,通过信号(signal)与槽(slot)实现一个单击按钮关闭主窗口的运行效果,具体操作步骤如下:

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

Pasted image 20250827143220

2)选中添加的关闭按钮,在菜单栏中选择编辑信号/槽菜单项,然后按住鼠标左键拖动至窗口的空白区域,如图所示。

Pasted image 20250827143500

3)拖动至窗口的空白区域松开鼠标后,将自动弹出配置连接对话框,首先选中显示从QWidget继承的信号和槽复选框,然后在上方的信号与槽列表中分别选择选中clicked()close(),如图所示。

Pasted image 20250827143731

Info: 说明 上图中,选中的clicked()为按钮的信号,然后选中的close()为槽函数(方法),工作逻辑是,单击按钮时发射clicked信号,该信号被主窗口的close()槽函数(方法)所捕获,并触发了关闭主窗口的行为。

4)单击OK按钮,即可完成信号与槽的关联,效果如图所示。

Pasted image 20250827143948

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

self.pushButton.clicked.connect(MainWindow.close)

为转换后的Python代码添加程序入口,然后运行程序,效果如图所示,单击关闭按钮,即可关闭当前窗口。

Pasted image 20250827145233

3  自定义槽


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

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

自定义一个槽函数,用来单击按钮时,弹出一个欢迎进入PyQt5编程世界的信息提示框。代码如下:

def showMessage(self):  
    from PyQt5.QtWidgets import QMessageBox  # 导入QMessageBox类  
    # 使用information()方法弹出信息提示框  
    QMessageBox.information(MainWindow,"提示框","欢迎进入PyQt5编程世界",QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)

Info: 说明 上面代码中用到了QMessageBox类,该类是PyQt5中提供的一个对话框类

4  将自定义槽连接到信号


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

self.pushButton.clicked.connect(self.showMessage)

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

Pasted image 20250827145957