pyqt5 qml 信号槽连接

发布于 2022-09-01 16:12:26 字数 776 浏览 12 评论 0

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1

ApplicationWindow{
    visible:true
    width:640
    height:480
    id:window
    title:asTr("editor")

    signal show(string text)



    TextArea{
        text:"hello"
        onTextChanged:show(text);
    }

}




import sys
from PyQt5.QtCore import QObject, QUrl, Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine

def show(text):
    print(text)


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



  engine.load('main.qml')

  win = engine.rootObjects()[0]


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

代码如上,我想用python代码中的show方法和qml文件中的show信号连接起来,我该怎么做呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

做个ˇ局外人 2022-09-08 16:12:26

写在qml里,我用C++的代码作为例子,python的做法应该是类似的,首先把C++对象(或python对象)暴露给qml:
engine.rootContext()->setContextProperty("myContext", myContext);
myContext要继承QObject,然后在qml里connect,如:

ApplicationWindow {
    title: qsTr("Hello World")
    width: 640
    height: 480
    visible: true

    signal show(string text) 
    Component.onCompleted: {
        show.connect(myContext.print);
    }
    ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文