2017-01-24 34 views
0

QQUIの画像をPyQtコードから更新する方法を探していました。私は見つけることができる最も近い答えは、私は私のプロジェクトにその解決策(または任意のソリューション)を適用したいGrecko Update ImageView in QMLPyQt5 - 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コードです。私はまだPyQT5とQMLにかなり新しいです

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

誰かが、私はこれを実装することができたり、私の基本的な例を編集する方法を示し基本的な例を持っている場合ので、それをいただければ幸いです。

ありがとうございました:)

答えて

0

を、あなたのMyImageタイプを経由してすべての画像をリロードする場合は、1つのオプション信号でPythonオブジェクトを公開し、トリガするMyImage.qmlにその信号を使用するようにsetContextProperty()メカニズムを使用することですreload()機能。 Pythonで

:ここでMyImage.qml

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

Image { 
    id: image 

    void reload() { ... } 

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

仮定はObjectWithAReloadSignal TiがQMLリロードをトリガする必要があるとき発するreloadImages()と呼ばれる信号を有することです。

関連する問題