我如何在 python dm-script 中遍历标签组

How do I travel through TagGroups in python dm-script

如何在 python 中的 中使用 TagGroup 的未知结构?


TagGroup广泛应用于数码显微。但是我如何在 python 中穿越它们呢?我如何获得所有可用的标签名称?

在正常的dm-script中有TagGroupGetTagLabel()TagGroupGetTagType()这样的函数。可以使用 for 循环来检查结构。但是 python 包装器 class Py_TagGroup 中没有一个函数可以获取有关标签的信息。此外,这些示例从不处理未知的 TagGroups.


我有一个非常简单的问题:我想使用(显示、修改、检查、保存...)图像中的标签。但是我不知道标签名称。

img = camera.AcquireImage()
tg = img.GetTagGroup()

但是现在呢?我对此一无所知TagGroupTagGroup 不可迭代,所以我不能在 for 循环中使用它们。我可以获得它们的长度,但我只能访问索引处的数据。而且只有当我知道数据类型时。我既不能得到类型也不能得到标签。


再说一遍:如何在 中穿越 python 中的 TagGroups?我怎样才能得到结构?

Python API 只是 DM-script API 的一个子集,不幸的是初始版本缺少一些重要的命令。如果您觉得缺少特定命令,请在 Gatan 的“问题报告”表单中将其作为功能请求报告。

GMS 3.4.2 似乎不包含执行所需操作的必要命令(在 Python 中)

顺便说一句,tagGroups 可迭代的。

taggroup tg = NewTagGroup()
tg.TagGroupSetTagAsString("a","A")
tg.TagGroupSetTagAsString("b","B")
tg.TagGroupSetTagAsString("d","d")
tg.TagGroupSetTagAsString("c","C")

string str
tg.tagGroupGetIndexedTagAsString(2,str)
Result("\n str:" + str)

tg.TagGroupOpenBrowserWindow("",0)

GitHUB 上的 Python 模块 execdmscript(版本 ≥ 1.1.4)支持将 Py_TagGroup 转换为 python dict s 或 lists。所以下面的代码对我有用:

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])

Disclaimer: I am the author of the execdmscript module. Still there is no easy solution1 for this problem at the moment so I am sure this is the best solution.


1execdmscript.convert_from_taggroup() 为此使用持久性标签和 dm-script 代码。它涉及将 Py_TagGroup 保存到全局标签。由于 dm-script 代码可以通过 TagGroups,TagGroup 的结构通过从 python 解释器执行 dm-script 代码来分析。结果再次保存到持久性标签中。然后使用 python 从全局标签中读取结构,并可以从中创建 dictlist