🐟🐟🐟 通过单例模式实现Pyqt中的全局事件总线

用处

在Pyqt中有时候是需要在从A到C进行信号传递的操作,如果A和C之间不是直接关联而是靠B进行关联的话,想要从A传到C需要通过B来接收A的信号后,再通过B发送信号到C,C再接收信号,这样做十分麻烦,所以可用采用类似Vue中的全局事件总线的方式通过单例模式来搭建一个集中处理这些需要中转的信号传递。

实现方法

  1. class SignalBus(QObject):
  2. totalUploadFileSignal = Signal(int) # 获取全部带上传文件
  3. finishUploadFileSignal = Signal(int) # 获取上传完成的文件
  4. def __new__(cls, *args, **kwargs):
  5. if not hasattr(cls, '_instance'):
  6. cls._instance = QObject.__new__(cls, *args, **kwargs)
  7. return cls._instance
  8. bus = SignalBus()

用法

在需要进行信号进行信号传递的地方调用实例化后的bus,通过bus中的信号进行信号的传递。