使用GTK将RTF复制到剪贴板(在Windows上)

时间:2016-10-06 17:35:39

标签: python-3.x clipboard gtk3 rtf

我正在使用GTK 3(和Python)开发一个小工具,在这里您复制一段代码并使用Pygments,它使用突出显示的代码填充系统的剪贴板,因此您可以将其粘贴到另一个支持RTF的应用程序。这个想法来自那段代码:http://pastebin.geany.org/SnUSw/

相关的代码:

clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_text(formatted_rtf, -1)
clipboard.store()

不幸的是,这并没有真正起作用。粘贴文本(即插入Word)时,您将获得原始RTF代码。搜索,可能有使用gtk_clipboard_set_with_data的解决方案,但我无法找到任何使用它的示例。我不知道它是否适用于Windows。有关如何使用GTK将RTF复制到剪贴板的任何工作示例都将受到欢迎。 (不一定是在Python中,只要很容易用GI翻译)

没有帮助的相关问题(链接已损坏):How to paste HTML to clipboard with GTK+

更新

我尝试使用set_with_data查看我在Github上找到的项目

def hightlight_text(self, data):
    text, lexer_name, style = data
    # (...)
    clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
    entries = [
        Gtk.TargetEntry.new("application/rtf", 0, 0),
        Gtk.TargetEntry.new("text/plain", 0, 1)
    ]
    clipboard.set_with_data(
        entries, 2,
        self.get_clipboard,
        None,
        (formatted_rtf, text)
    )

def get_clipboard(self, clipboard, selection_data, info, data):
    formatted_rtf, text = data
    if info == 1:
        requested_data = text
    else:
        requested_data = formatted_rtf
    selection_data.set(selection_data.get_target(), requested_data)

不幸的是,GObject-Introspection似乎并不喜欢......

Traceback (most recent call last):
  File "highlight.py", line 72, in hightlight_text
    clipboard.set_with_data(
AttributeError: 'Clipboard' object has no attribute 'set_with_data'

最后,我确实对如何使用Python(即使用GI)感兴趣。

1 个答案:

答案 0 :(得分:0)

不要以为你可以使用GTK来做到这一点。我基本上使用win32clipboard编写了你为自己描述的相同工具并引用了这个guide

认为Windows API具有某些剪贴板格式,导致应用程序以不同方式处理它们。 GTK可能只处理文本,这就是为什么在粘贴到RTF感知应用程序时出现原始RTF代码的原因。