我正在使用QML和Python3.6 + PySide2,我正在尝试用QML编写脚本,该脚本从python中的连接中获取两个整数并进行比较以决定用于窗口的图像背景。
有几件事我正在努力解决。首先,我不确定如何比较我的数值(日落和日出(变量。其次,我不知道如何编写一个有条件地生成背景图像的 if 语句式部分。第三,我认为最好不要在连接下执行此操作,甚至可能在我的 QML 中执行此操作,但我不确定如何将我的变量移动到其他地方。
我真的很感谢任何指示或帮助!!
我从中提取的数据如下所示: "日出":1592565499,"日落":1592617094
QML伪代码:
Connections {
target: weather
function onDataChanged(){
if(!weather.hasError()){
var sunrise = weather.data['dt']['sunrise']
var sunset = weather.data['dt']['sunset']
if (sunrise <= sunset)
Image {
source: "night.png"}
else
Image {
course: "day.png"}
}
你不能从这样的 if 语句创建 QML 项目(也不能从State
's(。如果您愿意,可以调用Qt.createComponent
,但是,在此示例中,这是矫枉过正的。应直接设置映像的source
属性:
Image {
id: image_tod
}
Connections {
target: weather
function onDataChanged(){
if(!weather.hasError()){
var sunrise = weather.data['dt']['sunrise']
var sunset = weather.data['dt']['sunset']
if (sunrise <= sunset)
image_tod.source = "night.png"
else
image_tod.source = "day.png"
}
}
}
查看代码,您实际上可能能够将其直接绑定到source
属性(不确定您的模型到底是什么样子(:
Image {
source: {
if(weather.data['dt']['sunrise'] <= weather.data['dt']['sunset'])
return "night.png"
else
return "day.png"
}
}
这是因为在编译 QML 时,引擎会从每个引用的变量(在本例中为weather
和data
(创建一个依赖项,并在其中任何一个表示更改时重新评估整个绑定。要充分利用这一点,您还应该将hasError
公开为属性而不是函数(并在它发生变化时发出(。
后续更新
是的,你可以随心所欲地让它变得狂野。我想你的意思是:
Image {
source: {
if(weather.data['dt']['sunrise'] <= weather.data['dt']['sunset'])
return "night.png"
else if(weather.data['dt']['sunrise'] > weather.data['dt']['sunset'])
return "day.png"
else
return "" //means no image
}
}