[英]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.