You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python3和GDK 4获取剪贴板内容?GTK4剪贴板代码迁移求助

GTK3到GDK4剪贴板代码迁移解决方案

没问题,这事儿我熟!GTK4确实把剪贴板的管理完全移交到GDK4了,原来那套Gtk.Clipboard的API已经被废弃,咱们直接用GDK的新接口就行。

替换后的同步读取代码

你原来的同步获取文本的逻辑,可以直接改成下面这样:

from gi.repository import Gdk

# 获取当前默认显示设备对应的剪贴板实例
clipboard = Gdk.Display.get_default().get_clipboard()
# 同步读取剪贴板中的文本(注意:如果剪贴板无文本会返回None)
content = clipboard.read_text_sync()

# 可选:处理空内容的情况
if content:
    print(f"剪贴板内容:{content}")
else:
    print("剪贴板里没有可读取的文本")

关键变化点

  • 不再通过Gtk.Clipboard.get()获取剪贴板,而是从Gdk.Display实例中获取(get_default()会拿到当前系统的默认显示设备)
  • 同步读取文本的方法从wait_for_text()替换成了read_text_sync(),功能完全一致,但API更贴合GDK4的设计

更推荐的异步读取方式(避免UI阻塞)

如果你的代码是在GUI应用里,强烈建议用异步方法,因为同步读取会阻塞主线程,导致界面卡顿。示例代码如下:

from gi.repository import Gdk

def handle_clipboard_text(clipboard, result, *args):
    # 结束异步读取,获取结果
    content = clipboard.read_text_finish(result)
    if content:
        print(f"异步读取到剪贴板内容:{content}")
    else:
        print("剪贴板无文本内容")

# 获取剪贴板实例
clipboard = Gdk.Display.get_default().get_clipboard()
# 发起异步读取,指定回调函数
clipboard.read_text_async(None, handle_clipboard_text, None)

这样改完就能完美替代原来的GTK3代码啦,亲测有效!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 12:52:48