在 Python 3 应用程序中,可以很容易地在 Gtk 3 中设置普通 ctrl-C ctrl-V 剪贴板的内容,例如
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_text("It worked!, -1)
使用剪贴板对象的信号还可以轻松监视剪贴板的变化owner-change
。
但是,owner-change
如果我的应用程序放剪贴板的内容,我不知道怎么做。信号owner-change
传递一个owner
指向的参数Gdk.Window
,但我从未在我的应用程序中明确创建窗口;我假设 Gtk 悄悄地为我创建了一个窗口,因为需要有一些 X 窗口来拥有剪贴板的内容。当剪贴板所有者更改时,我可以使用以下方法获取该 X 窗口的 ID:
def clipboardChanged(clipboard, owner_change):
print("New owner is", owner_change.owner.get_xid())
clipboard.connect('owner-change', clipboardChanged)
这个新所有者窗口显然属于我的应用程序,但我如何提前找到它的 xid?也就是说:我如何从信号中判断owner-change
新所有者是我?
(注意:如果我设置剪贴板的内容两次,我会收到两个owner-change
信号,并且每次都是,所以这是不可靠的:特别是,owner_change.reason
也会为“同一个所有者再次设置”发送,而不仅仅是“NEW_OWNER
NEW_OWNER
不同的所有者现在拥有剪贴板”。)