3

我有以下脚本clip-test.py

#!/usr/bin/python

import gtk

gtk.Clipboard().set_text("exciting clipboard contents")
gtk.Clipboard().set_can_store(None) # not sure if these last two lines are useful
gtk.Clipboard().store()

当我这样运行时:

python clip-test.py

它不起作用。剪贴板没有改变。我们可以通过在交互模式下运行而不让进程完成来阐明问题:

python -i clip-test.py

在离开交互模式之前,请尝试在某处粘贴。剪贴板已更改;有用。关闭python后,剪贴板恢复到原来的样子。

一种想法是,这与代码默认访问的剪贴板displayselection剪贴板有关,但我尝试改变这些参数,但仍然无法正常工作。

我正在使用 Python 2.7.3 和 python-gtk2 2.24.0-3build1,运行 Kubuntu 13.04。

是什么赋予了?

4

1 回答 1

8

这不是 GTK 或 PyGTK 问题,而是 X11 复制和粘贴工作方式的结果。当您按下^CX11 应用程序时,您还没有真正复制任何内容,您只是指示应用程序记住数据以供以后使用。只有在启动“粘贴”时,数据才会传输到粘贴器。这可以节省资源并使复印机和粘贴机能够协商最适合他们的数据传输格式。这在Jamie Zawinski 的经典文本中有详细解释。

现代桌面环境确实会尝试保留剪贴板内容,但您必须进入主循环并在其中停留足够长的时间,以便剪贴板管理器抓取您的剪贴板内容:

#!/usr/bin/python

import gtk, gobject

gtk.Clipboard().set_text("exciting clipboard contents")
gobject.timeout_add(100, gtk.main_quit)
gtk.main()

并且应该能够加快该过程,一些谷歌搜索显示set_can_store()程序正在使用它们将剪贴板数据保存在销毁处理程序中。不清楚为什么它对你不起作用——也许你应该打电话而不是.store()set_can_store([("UTF8_STRING", 0, 0)])set_can_store(None)

于 2013-03-06T09:10:17.580 回答