PyQt5 Emitting signals(QObject类的

2020-04-02  本文已影响0人  _Mirage

重点是QObject类的实例化对象可以发出信号,然后pyqtSignal类的实例化可以创建一个新的信号类型。

代码:

# coding='utf-8'

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtCore import pyqtSignal, QObject


# 创建继承自QObject类的子类,这个子类的实例化对象就可以发出信号
class Communicate(QObject):
    # 创建一个叫close_app的新信号
    close_app = pyqtSignal()


class Gui(QMainWindow):
    def __init__(self):
        super().__init__()
        self.start()

    def start(self):
        # 实例化QObject类的对象为self.c,作用还是可以类内通信
        self.c = Communicate()
        # 给实例化的QObject对象绑定一个slot(退出程序)\
        # 这相当于是一个新的信号
        self.c.close_app.connect(self.close)

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Emit Signal')
        self.show()

    # 重新鼠标点击事件
    # 当鼠标点击后让QObject对象的实例发出信号,
    # 发出的信号就被self.close这个slot接受并处理
    # 此时的event source 就是self.c, event object就是QMainWindow对象\
    # event target就是mousePressEvent(因为是这个函数里面发出的信号)
    def mousePressEvent(self, e) -> None:
        self.c.close_app.emit()


win = QApplication(sys.argv)
gui = Gui()
sys.exit(win.exec_())
运行结果: image.png

鼠标点击则退出。

上一篇 下一篇

猜你喜欢

热点阅读