Python 在另一个线程中加载图像,并在QML中执行进度

Python 在另一个线程中加载图像,并在QML中执行进度,python,qt,qml,Python,Qt,Qml,我使用QML和PyQt。我使用Python中的模型,并使用委托在QML中查看它的数据 import QtQuick 1.0 Rectangle { id: container ListView { id: tweetListView anchors.fill: parent; clip: true model: mymodel delegate: TweetDelegate { /

我使用QML和PyQt。我使用Python中的模型,并使用委托在QML中查看它的数据

import QtQuick 1.0

Rectangle {
    id: container

    ListView {
        id: tweetListView
        anchors.fill: parent;
        clip: true
        model: mymodel
        delegate: TweetDelegate {
        //...
        }
}
我需要在QML中打开图像,所以我使用

Image {
   //...
   source: url
   OnClicked: {
       busy_icon = true;
       // mainWindow is a Python object
       mainWindow.fetch_and_open(url);
       busy_icon = false;
   }
}
但是当运行
fetch\u和\u open()
时,UI将冻结,因此我们将永远不会是忙碌图标。我需要打开忙图标,在另一个线程中获取图像,并向代理发送一个信号
LoadFinished
,以关闭忙图标


但是我如何与委托外部的委托进行通信?

不幸的是,您的代码需要变得更加复杂。QML在单个线程中运行,对python的任何调用都是同步和阻塞的。答案是让python代码首先创建一个新线程。然后在新线程中执行fetch和open操作。棘手的部分是,现在你需要一种方法来告诉你的忙碌图标何时完成。这是通过在主窗口对象中创建一个信号来实现的,加载完成后可以触发该信号。从这里连接一个信号处理器来告诉你的忙碌图标停止,这是很简单的