繁体   English   中英

如何将信号连接到pyqt5和qml中的插槽?

[英]how to connect the signal to slot in pyqt5 and qml?

以下是我的代码。 我想要做的是要使用python更改main.qml“文本”的内容。 所以我决定将python代码中的信号“ changeText”连接到qml中的函数“ setText”,但是我不知道该怎么做。 也许还有其他解决方案,我该怎么办?

main.py

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import *  

class MyClass(QObject):
    changeText=pyqtSignal(str)

    def __init__(self):
        super().__init__()


if __name__ == "__main__":
  app = QApplication(sys.argv)
  engine = QQmlApplicationEngine()

  con=MyClass()
  ctx = engine.rootContext()
  ctx.setContextProperty("con", con)


  engine.load('main.qml')

  win = engine.rootObjects()[0]

  con.changeText.connect(win.setText)

  win.show()
  sys.exit(app.exec_())

main.qml

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.3

ApplicationWindow{
        visible:true
        width:940
        height:680
        id:root
        title:"markdwon editor"
    Rectangle{
        Text{               
            text:"hello"
            function setText(content)
            {
                text=content

            }
        }       
    }    
}

查看以下工作示例:

main.py

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import *


class MyClass(QObject):
    changeText = pyqtSignal(str)

    def __init__(self, parent=None):
        super(MyClass, self).__init__(parent)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    my_obj = MyClass()

    timer = QTimer()
    timer.start(2000)

    engine = QQmlApplicationEngine()
    ctx = engine.rootContext()
    ctx.setContextProperty("my_obj", my_obj)
    engine.load('main.qml')
    root = engine.rootObjects()[0]
    timer.timeout.connect(root.setText)
    sys.exit(app.exec_())

main.qml

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.3

ApplicationWindow{

        visible:true
        width:940
        height:680

        id:root

        title: "markdwon editor"

        function setText()
        {
            exampleId.text = Math.random();
        }

        Rectangle{

            Text{
                id:exampleId
                text:"hello"
            }
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM