我有以下脚本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 后,剪贴板恢复到之前的状态。
有人认为这与代码默认访问的display
和selection
剪贴板有关,但我已经尝试改变这些参数,但我仍然无法正常工作。
我正在使用 Python 2.7.3 和 python-gtk2 2.24.0-3build1,运行 Kubuntu 13.04。
什么给了?
最佳答案
这不是 GTK 或 PyGTK 问题,而是 X11 复制和粘贴工作方式的结果。当您在 X11 应用程序中按 ^C 时,您还没有真正复制任何内容,您只是指示应用程序记住数据以供以后使用。 只有在启动“粘贴”时,数据才会传输到粘贴器。这节省了资源,并使复印机和粘贴机能够协商最适合他们的数据传输格式。这在 the classic text by Jamie Zawinski 中有详细解释。 .
现代桌面环境 do attempt to hold on到剪贴板内容,但您必须进入主循环并在其中停留足够长的时间,以便剪贴板管理器获取您的剪贴板内容:
#!/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()
应该能够加快这个过程,一些谷歌搜索显示 programs are using them将剪贴板数据保存在销毁处理程序中。目前还不清楚为什么它对你不起作用——也许你应该调用 set_can_store([("UTF8_STRING", 0, 0)])
而不是 set_can_store(None)
.
关于python - PyGTK 剪贴板 set_text 的效果仅在进程运行时持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15241203/