使用PyGObject将HTML复制到剪贴板中

问题描述 投票:2回答:2

我想在Linux GUI环境中将HTML(和等效的纯文本)复制到剪贴板。跨平台是理想的,尽管Linux是我的直接目标。我还想使用在Python 3.x和2.x中都可以使用的东西。

根据PyGObject docsGtk.Clipboard对象set_with_data()方法应该合适。但是当我尝试使用它时,该类没有set_with_data成员。

>>> from gi.repository import Gtk, Gdk
>>> clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
>>> clipboard.set_with_data
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Clipboard' object has no attribute 'set_with_data'

如何使用PyGObject将HTML加纯文本复制到剪贴板?

((我可能考虑使用PyGTK,但是according to this answer已弃用,并且在Python 3.x中不支持。)

linux python-3.x pygobject
2个回答
1
投票

似乎set_with_data()没有通过内省公开,这可能是由于该函数接受了两个C回调(内省或绑定不支持)。看到:https://developer.gnome.org/gtk3/stable/gtk3-Clipboards.html#gtk-clipboard-set-with-data

[这是GTK +已记录的错误:https://bugzilla.gnome.org/show_bug.cgi?id=656312

一些潜在的解决方法:

  • 将程序限制为仅使用剪贴板.set_text()发送文本(违反了您的要求)
  • 编写C Python扩展,甚至对自己的填充库使用自省,该填充库提供set_with_data()的关闭版本。也可能使用类似ctypes的东西,但可能很痛苦。
  • 使用PyGTK(如前所述,不再维护)或其他工具包,例如PySide / Qt,wxPython等...

0
投票

我无法从Python进行此工作,但是我发现了以下使用xclip的解决方法:

import subprocess

s = "TEXT TO <b>COPY</b>!"
cmd = ["xclip", "-sel", "clip", "-t", "text/html", "-f"]
subprocess.check_output(cmd, input=s, text=True)
© www.soinside.com 2019 - 2024. All rights reserved.