我在 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 是否对运行时变量名做了某种隐藏的魔法?在这个例子中它是微不足道的,但它在我的代码中导致了一个很难隔离的错误,我想更好地理解这一点。
慕娘9325324
相关分类