使用PyGObject将HTML复制到剪贴板

时间:2014-08-06 02:41:49

标签: linux python-3.x pygobject

我想在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中不受支持。)

2 个答案:

答案 0 :(得分: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

一些可能的解决方法:

  • 仅使用clipboard.set_text()将您的程序限制为文本(打破您的要求)
  • 编写一个C Python扩展,甚至在自己的shim库中使用introspection,它提供了set_with_data()的闭包版本。它也可能使用像ctypes这样的东西,但可能很痛苦。
  • 使用PyGTK(如你所提到的那样不再维护)或其他工具包如PySide / Qt,wxPython等......

答案 1 :(得分: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)