You need to enable JavaScript to run this app. 如何不创建窗口即可将pixbuf图片保存到Gtk剪贴板?
优惠活动
大模型
产品
解决方案
定价
更多

如何不创建窗口即可将pixbuf图片保存到Gtk剪贴板?

问题原因

clipboard.store() 方法只是将写入剪贴板的操作提交到GTK内部事件队列,并不会直接完成系统剪贴板写入,必须运行GTK主循环处理完队列内的相关事件,数据才能真正写入系统剪贴板被其他程序读取。直接调用Gtk.main()会启动无限主循环,所以程序会一直阻塞无法退出。

解决方案

不需要保持主循环持续运行,只需要让主循环处理完剪贴板相关事件后自动退出即可,两种实现方式如下:

方案1:超时自动退出(兼容性更好)

# pixbuf is a pixbuf image
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk

clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_image(pixbuf)
clipboard.store()

# 注册10毫秒超时回调,触发后自动退出主循环
Gtk.timeout_add(10, Gtk.main_quit)
# 启动主循环,完成剪贴板写入后会自动退出,无感知延迟
Gtk.main()

方案2:事件队列清空后自动退出(无额外等待)

# pixbuf is a pixbuf image
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk

clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_image(pixbuf)
clipboard.store()

# 循环处理所有待处理GTK事件,直到队列清空
while Gtk.events_pending():
    Gtk.main_iteration()

两种方案都不需要创建任何窗口,也不会出现程序长时间阻塞的问题。

内容的提问来源于stack exchange,提问作者user1880364

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 13:06:01