python - 如何在 python dm-script 中遍历 TagGroups
问题描述
如何在 python的dm-scriptTagGroup
中使用s 的未知结构?
TagGroup
s 在DigitalMicrograph中被广泛使用。但是我如何在 python 中穿越它们呢?如何获取所有可用的标签名称?
正常情况dm-script
下有TagGroupGetTagLabel()
和之类的功能TagGroupGetTagType()
。可以使用for
-loop 来检查结构。但是 python 包装类中没有一个函数Py_TagGroup
可以获取有关标签的信息。此外,这些示例从不处理 unknown TagGroup
s。
我有一个非常简单的问题:我想使用(显示、修改、检查、保存……)图像中的标签。但我不知道标签名称。
img = camera.AcquireImage()
tg = img.GetTagGroup()
但现在呢?我对此一无所知TagGroup
。TagGroup
s 是不可迭代的,所以我不能在for
-loops 中使用它们。我可以得到它们的长度,但我只能访问索引处的数据。只有当我知道数据类型时。我既不能得到类型也不能得到标签。
再说一遍:我如何在dm-script中穿越TagGroup
python 中的 s ?我怎样才能得到结构?
解决方案
GitHUBexecdmscript
上的Python模块(版本≥1.1.4)支持将s转换为python或s。所以下面的代码对我有用:Py_TagGroup
dict
list
import execdmscript
img = camera.AcquireImage()
tg = img.GetTagGroup()
# convert the Py_TagGroup object to a python dict
tg = execdmscript.convert_from_taggroup(tg)
for key in tg:
print(key, tg[key])
免责声明:我是该
execdmscript
模块的作者。目前对于这个问题仍然没有简单的解决方案1,所以我相信这是最好的解决方案。
1execdmscript.convert_from_taggroup()
为此使用持久标签和dm-script
代码。它涉及将 保存Py_TagGroup
到全局标签。由于dm-script
代码可以穿过TagGroup
s,因此TagGroup
通过执行dm-script
python 解释器中的代码来分析 s 的结构。结果再次保存到持久标签。然后使用 python 从全局标签中读取结构,并且可以从中创建一个dict
或。list