Skip to main content
 首页 » 编程设计

python之PyGTK 剪贴板 set_text 的效果仅在进程运行时持续存在

2025年05月04日19jirigala

我有以下脚本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).