簡體   English   中英

使用 PyGObject 將 HTML 復制到剪貼板

[英]Copy HTML to clipboard with 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,但是根據這個答案,它已被棄用,並且在 Python 3.x 中不受支持。)

看起來 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 等...

我無法通過 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM