【问题标题】:Copy HTML to clipboard with PyGObject使用 PyGObject 将 HTML 复制到剪贴板
【发布时间】:2014-08-06 02:41:48
【问题描述】:

我想在 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


    【解决方案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 库上使用自省,它提供了 set_with_data() 的闭包版本。也可以使用 ctypes 之类的东西,但可能会很痛苦。
    • 使用 PyGTK(正如您所提到的已不再维护)或其他工具包,如 PySide/Qt、wxPython 等...

    【讨论】:

    • 自 2011 年 8 月以来,该 GTK+ 错误仍被标记为“新”。我不能再屏住呼吸了。 :)
    【解决方案2】:

    我无法通过 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 2019-07-18
      相关资源
      最近更新 更多