【问题标题】:PyQt5 - Update an Image in QMLPyQt5 - 在 QML 中更新图像
【发布时间】:2017-01-24 07:02:33
【问题描述】:

我一直在寻找一种方法来从我的 PyQt 代码更新我的 QML UI 上的图像。我能找到的最接近的答案来自 Grecko Update ImageView in QML

// Code from Stackoverflow Link 
// MyImage.qml
    Image {
        cache: false
        function reload() {
            var tmpSource = source;
            source = "";
            source = tmpSource;
        }
    }

我想将该解决方案(或任何解决方案)应用于我的项目。下面是一些与我的实现类似的示例代码。

#test.py
    import sys
    from PyQt5.QtCore import QObject, QUrl
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtQuick import QQuickView
    from PyQt5.QtQml import QQmlApplicationEngine


    if __name__ == '__main__':
        myApp = QApplication(sys.argv)

        engine = QQmlApplicationEngine()
        context = engine.rootContext()
        context.setContextProperty("main", engine)

        engine.load('main.qml')

        win = engine.rootObjects()[0]
        image = win.findChild(QObject, "myimage")
        #What do with the image here?

        win.show()

        sys.exit(myApp.exec_())

这是 QML 代码。

//test.qml
Image {
        id: image1
        objectName: "myimage"
        x: 384
        y: 403
        width: 100
        height: 100
        source: ""
    }

我对 PyQT5 和 QML 还很陌生,所以如果有人有一个基本示例来说明我如何实现它或可以编辑我的基本示例,我将不胜感激。

谢谢你:)

【问题讨论】:

    标签: image qml signals pyqt5


    【解决方案1】:

    如果您想通过MyImage 类型重新加载所有图像,那么一种选择是使用setContextProperty() 机制来公开带有信号的Python 对象,并在MyImage.qml 中使用该信号来触发reload()函数。

    在 Python 中:

    reloader = ObjectWithAReloadSignal()
    context.setContextProperty("_reloader", reloader);
    

    MyImage.qml

    Image {
        id: image
    
        void reload() { ... }
    
        Connections {
            target: _reloader
            onReloadImages: image.reload()
        }
    }
    

    这里的假设是ObjectWithAReloadSignal 有一个名为reloadImages() 的信号,当 QML 应该触发重新加载时 ti 会发出该信号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 2020-12-29
      • 2016-10-07
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多