QML:为图像设置“source”属性会导致它不显示

2024-04-25 20:02:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

QML Image: Protocol "" is unknown

有什么办法解决这个问题吗?在

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

主.py

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_())

主.qml

^{pr2}$

Tags: from图像importselfsourcepnginitdef
1条回答
网友
1楼 · 发布于 2024-04-25 20:02:06

您必须传递一个QUrl,您必须使用QUrl::fromLocalFile()

import os
import sys
from PyQt5 import QtCore, QtGui, QtQml
# import resource_rc

dir_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_())

相关问题 更多 >