PyQt5中的信号与槽,js 与 Qt 对象之间互相调用

一、PyQt中的信号与槽

信号(Signal)和槽(Slot)是Qt中的核心机制,用在对象之间互相通信。在Qt中每个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject的子对象)都支持信号与槽机制。当信号发射时,连接的槽函数将会执行。在PyQt5中信号与槽通过object.signal.connect()方法连接。

1.1 关于信号和槽的常识

Qt 提供了信号可以使用,当然你也可以QtCore.pySignal()来自定义信号

  • 一个信号可以连接多个槽;
  • 一个信号也可以连接另一个信号;
  • 一个槽可以监听多个信号;
  • 信号与槽的连接可能同步或者异步,还可能跨线程连接;
  • 信号也可能断开。

1.2 如何去使用

  1. connect(fun) 将槽函数地址传给connect 被信号连接
  2. disconnect可以将接触信号与槽的连接;
  3. 使用mySignal.emit() 可以发射信号
  4. 如果需要自定义信号,可以使用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)

原文地址:https://www.cnblogs.com/shiqi17/p/10686835.html

时间: 2024-08-02 06:57:52

PyQt5中的信号与槽,js 与 Qt 对象之间互相调用的相关文章

第78课 多线程中的信号与槽(上)

1. QThread类中的信号和槽 (1)QThread类拥有发射信号和定义槽函数的能力 (2)QThread中的关键信号 ①void started():线程开始运行时发射该信号 ②void finished():线程完成运行时发射该信号 ③void terminated():线程被异常终止时发射该信号 2. 与线程相关的概念 (1)线程栈 ①进程中存在栈空间的概念(区别于栈数据结构) ②栈空间专用于函数调用(保存函数参数.局部变量等) ③线程拥有独立的栈空间(可调用其它函数) ④只要函数体中

第八十课、多线程中的信号与槽(下)

一.线程体函数开启了事件循环,线程如何正常结束 1.QThread::exec()使得线程进入事件循环 (1).事件循环结束前,exec()后的语句无法执行 (2).quit()和exit()函数用于结束事件循环 (3).quit() <---->exit(0),exec()的返回值由exit()参数决定 2.注意 (1).无论事件循环是否开启,信号发送后会直接进入所依附线程的事件队列 (2).然而,只有开启了事件循环,对应的槽函数才会在线程中被调用  二.什么时候需要开启事件循环 1.设计原

Qt--QGraphicsItem 子类中使用信号与槽

最近,在使用Qt做一个小软件,其中用到了QGraphicsItem,并且需要使用信号与槽机制.QGraphiIcs的子类要实现信号与槽机制需要继承QObject. class Node : public QObject,public QGraphicsItem { Q_OBJECT       .... } 注意:一定要将public QObject放在public QGraphicsItem的前面,并且在该类的定义中添加Q_OBJECT宏. 编译时出现警告 Warning: Class Nod

Qt中使用信号和槽的一点心得

信号(Signal)与槽(Slot)-Qt中的典型机制 这一篇文章中都说得很详细了,这里不再重复,只说一点在实际使用中可能会遇到的问题. 1.一个信号不要同时连接几个槽函数,不然执行的顺序是随机的,最后的结果可能会和自己期待的有出入. 2.基本上,所有的信号连接槽函数之后,会执行完当前连接的槽函数,然后再执行emit信号之后的内容.但是也会有意外的情况发生:如果当前信号里面要执行的内容过于复杂(e.g.slots中又包含emit信号,本身slots函数又比较复杂等等),会导致线程之间的混乱,可能

QT5中的信号与槽与C++ 11的function的配合

最近将公司的界面开发库从WX转换到了QT,有了信号和槽,原本我们在使用WX的时候,为了使用信号,我们是使用BOOST的signal2库,到了QT有了信号槽,这个就没什么必要了 但是前段时间使用QT发现QT的信号和槽没有placeholder,也就是占位符,于是信号和槽声明只能严格地一样,比如 void slot(int val); void signal( int val); 但是在signals2,我们可用利用placeholder,及时函数声明不一样,也可用进行connect void sl

Qt中的信号和槽函数。

1:写一个close按钮当单击此按钮时就执行槽函数,而关闭窗口. 1 #include "slot.h" 2 #include <QApplication> 3 #include<QPushButton> 4 #include<time.h> 5 #ifndef SLOT_H 6 #define SLOT_H 7 #include <QMainWindow> 8 #include <QObject> 9 #include &l

jQuery对象与JS原生dom对象之间的转换

jQuery就是JS的一个扩展库,工具库,提供很多方便快捷的方法,所以将JS对象转换为jQuery对象后,能更方便地操作这个对象.但是jQuery对象也不是万能的,有一些JS对象有的能,jQuery对象并没有提供,所以需要转换回JS对象,才能进行操作.另外一种情况可能是,你使用某些第三方库,接口函数只能接受JS对象或者jQuery对象,那么你就需要在这两者之间进行转换. 1.将jQuery转换为dom对象的方法 [index] 或者.get(index): a.$(“#form”)[index]

qt中信号与槽机制

一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起,实现对象之间的通信. 信号 当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号.这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用. 槽 用于接收信号,而且槽只是普通的对象成员函数.一个槽并不知

Qt 5中信号和槽的新语法

QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT 库的基础之上.QT 支持下列平台:MS/WINDOWS-95.98.NT 和 2000:UNIX/X11-Linux.Sun Solaris.HP-UX.Digital Unix.IBM AIX.SGI IRIX:EMBEDDED- 支持 framebuffer 的 Linux 平台.伴随着 KD