使用 GTK+ 转储 X 剪贴板数据或 PyGTK

发布于 2024-08-23 07:55:29 字数 595 浏览 5 评论 0原文

如何使用 PyGTK/GTK+ 从 X 剪贴板粘贴 HTML 数据?

我需要类似 xclip 的东西,但能够将剪贴板数据输出为 HTML,不仅仅是纯文本。我正在使用 PyGTK,但我不害怕 C 中的普通 GTK+。

我读过 GtkClipboard 和 PyGTK 的 gtk.Clipboard< /a> 参考文献,我发现了这个问题 ,但我需要一个小例子来帮助我开始。

How do I paste HTML data from the X clipboard using PyGTK/GTK+?

I would need something like xclip, but with the ability to output clipboard data as HTML, not just as plain text. I'm using PyGTK, but I am not afraid of plain GTK+ in C.

I've read GtkClipboard and PyGTK's gtk.Clipboard references, and I've found this question, but I would need a small example to get me started.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酷到爆炸 2024-08-30 07:55:29

更新的答案

原始答案(如下)使用了旧的 API,这里是更新版本:

import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
text = clipboard.wait_for_contents(Gdk.Atom.intern("text/html", True))
print(text.get_data())

另请注意,您的应用程序可能使用与“text/html”不同的目标:您可以检查哪些目标可用:

def get_targets(clipboard, targets, n_targets):
    assert len(targets) == n_targets
    print(f"There are {n_targets} targets:")
    print("\n".join(map(str, targets)))

clipboard.request_targets(get_targets)

原始答案

找到了。我使用了这样的东西:

clipboard = gtk.Clipboard()
target = "text/html"
clipboard.wait_for_contents(target)
clipboard.request_contents(target, dump_clipboard_callback)

然后回调函数可以简单地提取数据:

def dump_clipboard_callback(clipboard, selection_data, data=None):
    print selection_data.data

Updated answer

The original answer (below) used an old API, here is an updated version:

import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
text = clipboard.wait_for_contents(Gdk.Atom.intern("text/html", True))
print(text.get_data())

Note also that your application may use a different target than "text/html": you can check which targets are available with:

def get_targets(clipboard, targets, n_targets):
    assert len(targets) == n_targets
    print(f"There are {n_targets} targets:")
    print("\n".join(map(str, targets)))

clipboard.request_targets(get_targets)

Original answer

Found it. I used something like this:

clipboard = gtk.Clipboard()
target = "text/html"
clipboard.wait_for_contents(target)
clipboard.request_contents(target, dump_clipboard_callback)

And then the callback function can simply extract the data:

def dump_clipboard_callback(clipboard, selection_data, data=None):
    print selection_data.data
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文