3 回答
TA贡献1811条经验 获得超5个赞
在您可以从 Python 脚本调用的 DM 脚本中,该命令GetApplicationDirectory()
为您提供所需内容。通常,您会想要使用“open_save”,即
GetApplicationDirectory("open_save",0)
这将返回在使用文件/打开或在新图像上使用文件/保存时出现的目录(字符串变量)。但是,它不是用于“文件/保存工作区”或其他保存的内容。
从有关该命令的 F1 帮助文档中:
请注意,“当前”目录的概念在 Win10 上与应用程序(包括 GMS)有些冲突。特别是“SetApplicationDirectory”命令并不总是按预期工作......
如果您想找出当前显示的特定文档的文件夹(图像或文本),您可以使用以下 DM 脚本。这里的假设是,窗口是最前面的窗口。
documentwindow win = GetDocumentWindow(0)
if ( win.WindowIsvalid() )
if ( win.WindowIsLinkedToFile() )
Result("\n" + win.WindowGetCurrentFile())
TA贡献1853条经验 获得超6个赞
对于也需要这个(并且只想复制一些代码)的每个人,我根据@BmyGuests 的回答创建了以下代码。这会获取脚本窗口绑定到的文件并将其保存为持久标记。然后从 python 文件中读取此标记(并删除标记)。
重要说明:这仅在您按下“执行脚本”按钮的 python 脚本窗口中有效,并且仅当此文件已保存时!但是从那里开始,您可能正在导入应该提供该module.__file__属性的脚本。这意味着这不适用于插件/库。
import DigitalMicrograph as DM
# the name of the tag is used, this is deleted so it shouldn't matter anyway
file_tag_name = "__python__file__"
# the dm-script to execute, double curly brackets are used because of the
# python format function
script = ("\n".join((
"DocumentWindow win = GetDocumentWindow(0);",
"if(win.WindowIsvalid()){{",
"if(win.WindowIsLinkedToFile()){{",
"TagGroup tg = GetPersistentTagGroup();",
"if(!tg.TagGroupDoesTagExist(\"{tag_name}\")){{",
"number index = tg.TagGroupCreateNewLabeledTag(\"{tag_name}\");",
"tg.TagGroupSetIndexedTagAsString(index, win.WindowGetCurrentFile());",
"}}",
"else{{",
"tg.TagGroupSetTagAsString(\"{tag_name}\", win.WindowGetCurrentFile());",
"}}",
"}}",
"}}"
))).format(tag_name=file_tag_name)
# execute the dm script
DM.ExecuteScriptString(script)
# read from the global tags to get the value to the python script
global_tags = DM.GetPersistentTagGroup()
if global_tags.IsValid():
s, __file__ = global_tags.GetTagAsString(file_tag_name);
if s:
# delete the created tag again
DM.ExecuteScriptString(
"GetPersistentTagGroup()." +
"TagGroupDeleteTagWithLabel(\"{}\");".format(file_tag_name)
)
else:
del __file__
try:
__file__
except NameError:
# set a default if the __file__ could not be received
__file__ = ""
print(__file__);
添加回答
举报