全工具集无关的跨平台剪贴板访问
项目描述
klembord
klembord
是一个python 3包,提供在支持平台上的完整剪贴板访问(目前为Linux和Windows,但未来可能会改变)。klembord
具有最小依赖性,仅依赖于平台特定API,这意味着它可以与任何图形工具包一起使用,也可以完全不使用工具包。
如果您认为这个软件很有用,
安装和依赖关系
klembord
在Linux上使用python-xlib
,在Windows上使用ctypes
。使用pip
安装时,将自动处理依赖关系。
pip install klembord
就这样!
用法
>>> import klembord
>>> klembord.init()
>>> klembord.get_text()
'example clipboard text'
>>>klembord.set_text('some string')
klembord
还包括用于处理富文本的便捷函数
>>> klembord.get_with_rich_text()
('example html', '<i>example html</i>')
>>> klembord.set_with_rich_text('plain text', '<b>plain text</b>')
富文本函数集平台的多字节和HTML格式。
在Linux上访问除CLIPBOARD
之外的剪贴板内容很容易,只需将选择名称传递给init
klembord.init('PRIMARY')
如果您需要访问其他目标/格式,可以使用get
和set
函数
>>> content = {'UTF8_STRING': 'string'.encode(), 'text/html': '<s>string</s>'.encode()}
>>> klembord.set(content)
>>> klembord.get(['UTF8_STRING', 'text/html', 'application/rtf'])
{'UTF8_STRING': b'string', 'text/html': b'<s>string</s>', 'application/rtf': None}
>>> from collections import OrderedDict
>>> content = OrderedDict()
>>> content['HTML Format'] = klembord.wrap_html('<a href="example.com">Example</a>')
>>> content['CF_UNICODETEXT'] = 'Example'.encode('utf-16le')
>>> klembord.set(content)
>>> klembord.get(['HTML Format', 'CF_RTF'])
{'HTML Format': b'<a href="example.com">Example</a>', 'CF_RTF': None}
这些示例展示了手动设置带富文本的剪贴板的方法。与便利函数 get
和 set
不同,它以字节字典作为参数。键应该是目标/格式字符串,值是二进制数据或编码字符串。每个提供的格式/目标都将被设置。
第一个示例是 Linux 的用法。大多数目标都使用 utf8
编码,所以相对简单。第二个示例显示了 Windows 的用法。现在 Windows 会按照定义的顺序检索格式,所以使用 collections.OrderedDict
是一个好主意,以确保 HTML 格式优先于纯文本。CF_UNICODE
,Unicode 文本格式始终使用 utf-16le
编码。如果你用 utf8
设置此目标,粘贴时会出现未知字符。另一件需要注意的事情是 wrap_html
函数。虽然 Linux 上设置纯 HTML 有效,但 Windows 使用自己的(不必要的)格式。此函数接受 HTML 片段字符串并返回格式化的字节数据对象。wrap_html
仅在 Windows 上可用。
列出可用的目标/格式
>>> klembord.get(['TARGETS'])
{'TARGETS': ['TARGETS', 'SAVE_TARGETS', 'UTF8_STRING', 'STRING']}
Linux 上的剪贴板持久性
从版本 0.1.3 开始,klembord 支持在应用程序退出后存储内容在剪贴板中。您需要显式调用 klembord.store()
。注意,此方法在 Windows 上会引发 AttributeError
。
选择对象
如果您需要同时访问剪贴板上的 PRIMARY
选择或您更喜欢使用对象而不是模块级别函数,您可以使用 Selection
对象。
from klembord import Selection
这些对象具有与模块级别函数相同的方法,其中 klembord.init(SELECTION)
是 Selection.__init__(SELECTION)
。
为什么选择 klembord
klembord 在荷兰语中意味着剪贴板。由于 PyPI 上的每个合理名称都被占用,我决定查阅词典。现在您可能会想,由于有那么多用于访问剪贴板的包,klembord 是不必要的。不幸的是,所有其他包都只与纯文本一起工作,依赖于重型工具包或外部可执行文件,在某个特定情况下,整个包只是从 pyperclip 导入复制和粘贴函数。我觉得这种情况相当令人难过,所以我决定编写 klembord
。
错误和限制
- 理论上设置二进制格式应该有效,但它大部分未经过测试。
- 设置/获取 Windows 内置的二进制格式(例如,
CF_BITMAP
)不起作用,并且会导致 Python 崩溃。这些需要特殊处理,但目前klembord
中尚未实现。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪一个,请了解有关 安装包 的更多信息。