猿问

QML:为图像设置“源”属性会导致它消失

我想要做的是在 PyQt5 中使用 QML 更新图像的源。当我element.setProperty("source", "./testImage.png")用来更改图像时,我收到以下错误消息。


QML 图像:协议“”未知


关于如何解决这个问题的任何想法?


我已经研究了与 QML 元素交互的其他方法,如果可能的话,我想坚持通过 Python 代码而不是仅通过 QML 更改图像。


主文件


from PyQt5.QtWidgets import *

from PyQt5.QtQml import *

from PyQt5.QtCore import *

from PyQt5.QtQuick import *

from PyQt5 import *


import sys

import resource_rc


class MainWindow(QQmlApplicationEngine):

    def __init__(self):

        super().__init__()

        self.load("main.qml")

        self.rootContext().setContextProperty("MainWindow", self)


        self.window = self.rootObjects()[0]


        self.cardLeft = self.window.findChild(QObject, "cardLeft")


    @pyqtSlot()

    def changeImage(self):

        self.cardLeft.setProperty("source", "./images/3_of_clubs.png")


if __name__ == '__main__':

    app = QApplication(sys.argv)


    window = MainWindow()


    sys.exit(app.exec_())


烙印99
浏览 178回答 1
1回答

白衣非少年

你必须QUrl为它传递一个你必须使用的QUrl::fromLocalFile():import osimport sysfrom PyQt5 import QtCore, QtGui, QtQml# import resource_rcdir_path = os.path.dirname(os.path.realpath(__file__))class MainWindow(QtQml.QQmlApplicationEngine):    def __init__(self):        super().__init__()        self.load(QtCore.QUrl.fromLocalFile(os.path.join(dir_path, "main.qml")))        self.rootContext().setContextProperty("MainWindow", self)        if self.rootObjects():            self.window = self.rootObjects()[0]            self.cardLeft = self.window.findChild(QtCore.QObject, "cardLeft")    @QtCore.pyqtSlot()    def changeImage(self):        if self.cardLeft:            url = QtCore.QUrl.fromLocalFile(os.path.join(dir_path, "images/3_of_clubs.png"))            self.cardLeft.setProperty("source", url)if __name__ == '__main__':    app = QtGui.QGuiApplication(sys.argv)    window = MainWindow()    sys.exit(app.exec_())
随时随地看视频慕课网APP

相关分类

Python
我要回答