Erlo

Python 通过 COM 调用 ChemDraw 实践

2024-08-30 14:29:32 发布   9 浏览  
页面报错/反馈
收藏 点赞

COM

Component Object Model (COM) 是由 Microsoft 提供的一种二进制接口技术,用于软件组件间的交互。它支持在不同编程语言、编程环境、进程和计算机之间以语言中立的方式使用对象。

使用 Python 通过 COM 接口调用 ChemDraw 绘制分子及获取文档中的对象

Python 提供了一些常用的库,如 pywin32comtypes,可以用来与 COM 进行交互。

以下是一个使用 Python 通过 COM 接口调用 ChemDraw 绘制分子结构并获取文档中对象数据的示例:

import time
import comtypes.client as w32
import win32clipboard

smiles = 'CC1=Nc2ccccc2[NMe]1'

def set_clipboard_text(text: str):
    """将文本设置到剪贴板"""
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(text)
    win32clipboard.CloseClipboard()

# 创建 ChemDraw 应用实例
ChemDraw = w32.CreateObject("ChemDraw.Application")

# 创建一个新文档
doc = ChemDraw.Documents.Add()

# 将 SMILES 粘贴到到剪贴板
set_clipboard_text(smiles)

# 将剪贴板中的 SMILES 粘贴到 ChemDraw 中
doc.Paste()

# way2: 直接 set 对象
# 此操作不一定成功,如无法进行该操作,则使用“复制-粘贴”的方法
# doc.Objects.Data.fset(doc.Objects.Data.instance, pVal=smiles)

# 等待粘贴操作完成
time.sleep(0.5)

# 获取标准化的 SMILES
canonical_smiles = doc.Objects.Data('chemical/x-smiles')

# 获取 CDXML 文件内容
cdxml_file = doc.Objects.Data('chemical/x-cdxml')

# 获取 MOL 文件内容
mol_block = doc.Objects.Data('chemical/x-mdl-molfile')

# 清空文档中的对象,为下一次操作做准备
doc.Objects.Clear()

# 关闭文档以清理资源
doc.Close()
ChemDraw.Quit()

注意:确保 Python 和 ChemDraw 的位数一致。如果 ChemDraw 是 32 位的,则需要在 32 位的 Python 环境下运行该脚本。


登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认