【发布时间】:2020-06-29 15:53:16
【问题描述】:
我在 PySide2 和 QML 中工作,而 QQmlPropertyList 正在做两件我觉得很奇怪的事情。
首先,如果 QObject 是在同一语句中创建的,则将其分配为值是行不通的:
from PySide2.QtCore import QObject
from PySide2.QtQml import QQmlPropertyMap
qmap = QQmlPropertyMap()
qmap.insert('test_key', QObject())
print(qmap.value('test_key'))
输出:
None
也许这与初始化 QObject 的时间有关?可以通过先将其分配给变量来修复它:
qmap = QQmlPropertyMap()
obj = QObject()
qmap.insert('test_key', obj)
print(qmap.value('test_key'))
<PySide2.QtCore.QObject(0x7fe8f26b5eb0) at 0x107075ec0>
但它变得陌生。忍受我。分配两个 QObjects 工作:
qmap = QQmlPropertyMap()
obj = QObject()
qmap.insert('test_key', obj)
obj2 = QObject()
qmap.insert('test_key2', obj2)
print(qmap.value('test_key'))
print(qmap.value('test_key2'))
<PySide2.QtCore.QObject(0x7f85f7f269e0) at 0x10d32b080>
<PySide2.QtCore.QObject(0x7f85f7f26b70) at 0x10d32b100>
我什至可以将同一个对象分配给多个键:
qmap = QQmlPropertyMap()
obj = QObject()
qmap.insert('test_key', obj)
qmap.insert('test_key2', obj)
print(qmap.value('test_key'))
print(qmap.value('test_key2'))
<PySide2.QtCore.QObject(0x7fde37d7d9d0) at 0x105cdc140>
<PySide2.QtCore.QObject(0x7fde37d7d9d0) at 0x105cdc140>
但是如果我为两个不同的对象重用相同的变量名,第一个键的值会以某种方式被删除:
qmap = QQmlPropertyMap()
obj = QObject()
qmap.insert('test_key', obj)
obj = QObject()
qmap.insert('test_key2', obj)
print(qmap.value('test_key'))
print(qmap.value('test_key2'))
None
<PySide2.QtCore.QObject(0x7fcecaf072f0) at 0x111ba60c0>
这怎么可能? PySide 是否对运行时变量名称进行了某种隐藏的魔法?在这个例子中,这是微不足道的,但它在我的代码中导致了一个难以隔离的错误,我想更好地理解这一点。
【问题讨论】: