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_())
运行结果:

鼠标点击则退出。