PyQt5 - 在 QML 中更新图像
Posted
技术标签:
【中文标题】PyQt5 - 在 QML 中更新图像【英文标题】:PyQt5 - Update an Image in QML 【发布时间】:2017-01-24 07:02:33 【问题描述】:我一直在寻找一种方法来从我的 PyQt 代码更新我的 QML UI 上的图像。我能找到的最接近的答案来自 Grecko Update ImageView in QML
// Code from *** 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 代码。
//test.qml
Image
id: image1
objectName: "myimage"
x: 384
y: 403
width: 100
height: 100
source: ""
我对 PyQT5 和 QML 还很陌生,所以如果有人有一个基本示例来说明我如何实现它或可以编辑我的基本示例,我将不胜感激。
谢谢你:)
【问题讨论】:
【参考方案1】:如果您想通过MyImage
类型重新加载所有图像,那么一种选择是使用setContextProperty()
机制来公开带有信号的Python 对象,并在MyImage.qml
中使用该信号来触发reload()
函数。
在 Python 中:
reloader = ObjectWithAReloadSignal()
context.setContextProperty("_reloader", reloader);
在MyImage.qml
Image
id: image
void reload() ...
Connections
target: _reloader
onReloadImages: image.reload()
这里的假设是ObjectWithAReloadSignal
有一个名为reloadImages()
的信号,当 QML 应该触发重新加载时 ti 会发出该信号。
【讨论】:
以上是关于PyQt5 - 在 QML 中更新图像的主要内容,如果未能解决你的问题,请参考以下文章