0

我使用 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_and_open()运行时,UI 会冻结,所以我们永远不会是忙图标。我需要打开忙碌图标,在另一个线程中获取图像,LoadFinished并向委托发送信号以关闭忙碌图标。

但是我如何与委托之外的委托进行沟通呢?

4

1 回答 1

0

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

于 2013-03-25T14:25:16.987 回答