从python访问备用剪贴板格式

时间:2015-10-06 00:29:03

标签: python windows macos tkinter clipboard

从支持富文本的应用程序复制到剪贴板通常会以多种格式添加文本。我需要找出可用的格式,然后以选定的格式检索剪贴板内容。如果它很重要,我对富文本格式(来自Word,Acrobat,浏览器......)感兴趣,而不是图像数据或其他exotica

我看了看,但我发现的解决方案仅限于纯文本,super outdated,特定于Windows(我在OS X上),{{3在命令行实用程序pbcopypbpaste(不处理所有剪贴板格式)或上面的几个。

所以:如何获取剪贴板中显示的格式列表,并以我选择的格式提取其内容?

平台,按照兴趣顺序:系统无关(我希望),OS X Mountain Lion(我当前的平台)或类似的,其他平台(我计划分发我的代码)。

选定的链接

reliant:看起来很有趣,但在OS X上它委托给支持pbcopypbpastetext格式的rtfps

来自activestate的

pyperclip仅适用于Windows,但展示了如何获取HTML。 (This recipe所以问题是指它。)

This也特定于win32clipboard。

This SO answer问题是关于将文件拖放到剪贴板(在Windows上)。有趣,但没有帮助我需要。

This很简单,仍然适用于OS X,但它只能获得纯文本 - 而且我没有发现tkinter可以处理其他任何事情的证据。

This tkinter-based solution显示文本放在剪贴板上的近似相同的tkinter代码。

编辑(2017年5月)

我现在有一个针对OS X的解决方案(请参阅下面的This),但我很期待听到pyperclip或其他模块是否可以在Windows上执行相同操作。 Pyperclip深入了解Windows API,因此它不能支持所有可用格式的列表和选择。

1 个答案:

答案 0 :(得分:0)

借助于pypi上提供的模块richxerox,它在OS X上非常简单。它需要系统支持,包括Apple AppKitFoundation模块。我在为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)

<强>输出:

(
    "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

要以所需格式打印并回退到文本,您可以使用:

paste_format = "rtf"
content = rx.paste(paste_format)
if not content:
    content = rx.paste("text")

或者您可以先检查格式是否可用:

if "public.rtf" in rx.available():
    content = rx.paste("rtf")
else:
    content = rx.paste("text")