程序员开发实例大全宝库

网站首页 > 编程文章 正文

实战PyQt5: 003-PyQt的信号和槽机制简介

zazugpt 2024-09-11 11:28:23 编程文章 17 ℃ 0 评论


什么是信号和槽

信号(Signal)和槽(Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制。在QT中,每个继承自QObject的对象都可以使用信号和槽机制来进行通信。 信号和槽函数通过object.signal.connect()方法来连接。当一个QObject对象发射信号,与之相连接的槽函数将会自动执行。

假设我们将每个继承自QObject的对象想象成现实系统中可以完成一种或多种功能的部件,信号相当于发射,槽相当于接收。当某个部件完成某个功能后,可以发送一个信号,表示我已经完成了某项工作(同时可以传递一些结果数据, 非必须),这时候,那些和该信号连接的部件,相当于接收到该信号,对应的槽函数完成相应的工作。

信号和槽机制是类型安全的(type-safe):一个信号的参数必须和接收槽的参数匹配,(槽的参数可以比它接收的信号的参数短)。信号与槽是松耦合(loosely coupled)的:一个发出信号的类既不知道也不关心哪一个槽接收到这个信号。Qt的信号和槽机制保证了如果你将一个信号连接到一个槽上,槽会在正确的时间以信号的参数被调用。信号与槽可以携带任意个、任意类型的参数。

PyQt的对象都包含各自的内置信号,也可以添加自定义信号,信号与槽的特点大致如下:

  • 一个信号可以连接多个槽;
  • 一个信号可以连接另一个信号;
  • 信号参数可以是Python基本数据类型,也可以扩展新的数据类型;
  • 多个信号可以连接在一个槽上,即一个槽可以监听多个信号;
  • 信号与槽的连接方式可以是同步连接,也可以是异步连接;
  • 信号与槽可能会在不同的线程间连接,这时信号连接只能是异步方式;
  • 信号不是必须有槽和其连接,即信号可以不处理;
  • 信号个槽的连接可以被断开。

信号和槽的使用方法演示

在PyQt中,当object发出信号时,使用信号(signal)直接连接槽函数(slot_function), 连接方式如下:

object.signal.connect(slot_function);

下面的代码使用一个按钮,演示了信号和槽的连接方式:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox
 
class testWindow(QMainWindow):
    def __init__(self, parent=None):
        super(testWindow, self).__init__(parent)
        
        button = QPushButton("按钮", self)
        button.move(100, 100)
        button.clicked.connect(self.buttonClicked)
        
        self.setGeometry(100, 100, 320, 240)
        self.setWindowTitle("Test Signal Slot connect")
    
    def buttonClicked(self):
        QMessageBox.information(self, "提示信息", "信号和槽测试:点击了按钮")
         
if __name__ == '__main__':
    app = QApplication(sys.argv)
    wnd = testWindow()
    wnd.show()
    sys.exit(app.exec())

运行上述代码,结果如下图所示

本文知识点

  • 什么是信号和槽;
  • 信号和槽的连接方式;
  • 使用QWidget对象QPushButton。

喜欢本文内容的就收藏,点赞,评论,关注和转发。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表