PyQt5中的信号与槽,js 与 Qt 对象之间互相调用
一、PyQt中的信号与槽
信号(Signal)和槽(Slot)是Qt中的核心机制,用在对象之间互相通信。在Qt中每个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject的子对象)都支持信号与槽机制。当信号发射时,连接的槽函数将会执行。在PyQt5中信号与槽通过object.signal.connect()方法连接。
1.1 关于信号和槽的常识
Qt 提供了信号可以使用,当然你也可以QtCore.pySignal()来自定义信号
-
一个信号可以连接多个槽;
-
一个信号也可以连接另一个信号;
-
一个槽可以监听多个信号;
-
信号与槽的连接可能同步或者异步,还可能跨线程连接;
-
信号也可能断开。
1.2 如何去使用
-
connect(fun) 将槽函数地址传给connect 被信号连接
-
disconnect可以将接触信号与槽的连接;
-
使用mySignal.emit() 可以发射信号
-
如果需要自定义信号,可以使用PyQt5.QtCore下的pyqtSignal方法。
import sys,os
from PyQt5.QtCore import pyqtSignal,QObject
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtGui import QIcon
path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
class Communicate(QObject):
closeApp = pyqtSignal()
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(600,300,500,400)
self.setWindowIcon(QIcon(r'%s\picture\chuan.ico' % path))
self.setWindowTitle('emit')
self.c = Communicate()
self.c.closeApp.connect(self.close)
def mousePressEvent(self, *args, **kwargs):
self.c.closeApp.emit()
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
在这个示例中,我们创建了一个closeApp的信号,该信号会在鼠标按下时触发。且该事件与QMainwindow绑定。
class Communicate(QObject):
closeApp = pyqtSignal()
这里,我们创建了一个Communicate类,并在该类下创建了信号。
self.c = Communicate()
self.c.closeApp.connect(self.close)
人生还有意义。那一定是还在找存在的理由
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?