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

Linux 使用PyGObject将HTML复制到剪贴板,linux,python-3.x,pygobject,Linux,Python 3.x,Pygobject,我想在LinuxGUI环境中将HTML(和纯文本等价物)复制到剪贴板。跨平台是理想的,尽管Linux是我的直接目标。我还想使用在Python3.x和2.x中工作的东西 根据,一个Gtk.Clipboardobjectset_with_data()方法应该是合适的。但是当我尝试使用它时,类中没有set\u with\u data成员 >>> from gi.repository import Gtk, Gdk >>> clipboard = Gtk.Clipbo

我想在LinuxGUI环境中将HTML(和纯文本等价物)复制到剪贴板。跨平台是理想的,尽管Linux是我的直接目标。我还想使用在Python3.x和2.x中工作的东西

根据,一个
Gtk.Clipboard
object
set_with_data()
方法应该是合适的。但是当我尝试使用它时,类中没有
set\u with\u 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'
>>从gi.repository导入Gtk、Gdk
>>>剪贴板=Gtk.clipboard.get(Gdk.SELECTION\u剪贴板)
>>>clipboard.set_与_数据
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“剪贴板”对象没有属性“使用\u数据设置\u”
如何使用PyGObject将HTML加明文复制到剪贴板


(我可能会考虑使用Pygtk,但是它在Python 3 .x中不支持,不支持)

看起来像StIyWixDATA()不通过内省暴露,可能是因为函数接受两个C回调(不被内省或绑定支持)。请参阅:

这是一个已经用GTK+记录的错误:

一些潜在的解决办法:

  • 使用剪贴板将程序限制为仅包含文本。set_text()(符合您的要求)
  • 编写一个C Python扩展,甚至在您自己的shim库上使用内省,该库提供了一个带有_data()的set_的闭包版本。也可以使用像ctypes这样的东西,但可能会很痛苦
  • 使用PyGTK(正如您所提到的不再维护)或其他工具包,如PySide/Qt、wxPython等

我无法从Python实现这一点,但我发现以下解决方法是使用:

导入子流程
s=“要复制的文本!”
cmd=[“xclip”、“-sel”、“clip”、“-t”、“text/html”、“-f”]
子进程检查输出(cmd,input=s,text=True)

自2011年8月以来,GTK+缺陷仍然标记为“新”。我再也憋不住气了
import subprocess

s = "TEXT TO <b>COPY</b>!"
cmd = ["xclip", "-sel", "clip", "-t", "text/html", "-f"]
subprocess.check_output(cmd, input=s, text=True)