我正在使用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)感兴趣。
答案 0 :(得分:0)
不要以为你可以使用GTK来做到这一点。我基本上使用win32clipboard编写了你为自己描述的相同工具并引用了这个guide。
认为Windows API具有某些剪贴板格式,导致应用程序以不同方式处理它们。 GTK可能只处理文本,这就是为什么在粘贴到RTF感知应用程序时出现原始RTF代码的原因。