zoukankan      html  css  js  c++  java
  • 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'%spicturechuan.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)

  • 相关阅读:
    第三课 本代码用于学习vue根组件数据的各种绑定
    第七课 键入事件,点击绑定事件,数据判断及删除事件
    第九课 代码封装localstorage
    第八课 没有封装localstorage
    第五课 vue的事件调用自定义方法
    第六课 点击事件调用自定义方法
    new多个文件编程和split单个文件多个窗口编程
    线性表特点和用法总结
    scanf在输入整型数据和字符型数据时的不同
    tasklet源码注释翻译
  • 原文地址:https://www.cnblogs.com/shiqi17/p/10686835.html
Copyright © 2011-2022 走看看