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

标签 python gtk pygtk clipboard

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

什么给了?

最佳答案

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

相关文章:

使用 Supervisor 进行 Python 日志记录

python - 自定义 Cython 生成的 .so 文件的位置

c - 向 SDL 添加菜单,同时保持跨平台兼容

python - PyGTK-2.24.0安装找不到NumPy

python - 如何使用python向服务器提交表单并通过互联网从服务器获取csv文件?

python - 将列表拆分为单独的列表 [Python]

python - Windows 上的 PyGObject 和 cx_freeze

python - 如何在自定义 Gtk 小部件中设置最小/首选大小

python - 在 PyGTK 中使用 F11 切换全屏的简单方法

windows - 在 Windows 10 上为 python 3.6.1 安装 pygtk