2013-03-06 51 views
1

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

这不是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)

+0

稍微有些奇怪,但有很多意义,感谢彻底的解释和链接。 – tobek 2013-10-28 23:49:55