ale*_*xis 10 python windows macos clipboard tkinter
从支持富文本的应用程序复制到剪贴板通常会以多种格式添加文本.我需要找出可用的格式,然后以选定的格式检索剪贴板内容.如果它很重要,我对富文本格式(来自Word,Acrobat,浏览器......)感兴趣,而不是图像数据或其他exotica.
我看了看,但我找到的解决方案仅限于纯文本,超级过时,特定于Windows(我在OS X上),依赖命令行实用程序pbcopy和pbpaste(不处理所有剪贴板格式) ),或以上几种.
那么:我如何获得剪贴板中存在的格式列表,并以我选择的格式提取其内容?
平台,按照兴趣顺序:系统独立(我希望),OS X Mountain Lion(我当前的平台)或类似的,其他平台(我计划分发我的代码).
pyperclip:看起来很有趣,但在OS X上它委托给pbcopy和pbpaste支持text,rtf并ps仅格式.
来自activestate的此配方仅适用于Windows,但显示了如何获取HTML.(这个问题涉及到它).
这个SO答案也特定于win32clipboard.
这个问题是关于将文件拖放到剪贴板(在Windows上).有趣,但没有帮助我需要什么.
这个基于 tkinter 的解决方案很简单,仍然适用于OS X,但它只能获得纯文本 - 而且我没有发现tkinter可以处理其他任何事情的证据.
这显示了用于将文本放在剪贴板上的几乎相同的tkinter代码.
我现在有一个OS X的解决方案(请参阅下面的自我回答),但我希望听到是否(以及如何)pyperclip或其他模块可以在Windows上执行相同的操作.Pyperclip深入了解Windows API,因此它不能远离支持所有可用格式的列表和选择.
借助pypi 上提供的richxerox模块,这在 OS X 上非常简单。它需要系统支持,包括AppleAppKit和Foundation模块。我在为 Python 3 构建 Objective C 时遇到了麻烦,因此最初我只让它适用于 Python 2。然而,Anaconda 3 预装了所有必要的部分。
下面是一个演示,它打印可用的剪贴板类型,然后获取并打印每一种类型:
import richxerox as rx
# Dump formats
verbose = True
if verbose:
print(rx.available(neat=False, dyn=True))
else:
print(rx.available())
# Dump contents in all formats
for k, v in rx.pasteall(neat=False, dyn=True).items():
line = "\n*** "+k+": "+v
print(line)
Run Code Online (Sandbox Code Playgroud)
输出:
(
"public.html",
"public.utf8-plain-text"
)
*** public.html: <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8">
</head><body><a href="http://coffeeghost.net/2010/10/09/pyperclip-a-cross-platform-clipboard-module-for-python/"
rel="nofollow noreferrer">pyperclip</a>: Looks interesting</body></html>
*** public.utf8-plain-text: pyperclip: Looks interesting
Run Code Online (Sandbox Code Playgroud)
要以所需的格式打印并回退到文本,您可以使用以下命令:
paste_format = "rtf"
content = rx.paste(paste_format)
if not content:
content = rx.paste("text")
Run Code Online (Sandbox Code Playgroud)
或者您可以先检查格式是否可用:
if "public.rtf" in rx.available():
content = rx.paste("rtf")
else:
content = rx.paste("text")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
686 次 |
| 最近记录: |