gpt4 book ai didi

python - 如何在 Ubuntu 上的 GTK3 (GI) 和 Python 3 中获取剪贴板内容

转载 作者:行者123 更新时间:2023-11-28 18:51:00 24 4
gpt4 key购买 nike

在 Python 2 中,使用我机器中安装的 (Ubuntu 12.10),我可以做

import gtk
cb = gtk.clipboard_get()
content = cb.wait_for_text()

从剪贴板中获取文本。

然而,在 Python3 中,我应该对 Gtk.Clipboard() 对象做同样的事情,但是我抛出了一些似乎与小部件和类似东西相关的错误,但我的应用程序没有 GUI,并且是不应该。我走在正确的轨道上吗?

>>> from gi.repository import Gtk
>>> cb = Gtk.Clipboard()
>>> content = cb.wait_for_text()
/usr/lib/python3/dist-packages/gi/types.py:47: Warning: g_object_get_data: assertion `G_IS_OBJECT (object)' failed
return info.invoke(*args, **kwargs)

(.:10935): Gdk-CRITICAL **: gdk_display_get_default_screen: assertion `GDK_IS_DISPLAY (display)' failed

(.:10935): Gtk-CRITICAL **: gtk_invisible_new_for_screen: assertion `GDK_IS_SCREEN (screen)' failed
/usr/lib/python3/dist-packages/gi/types.py:47: Warning: invalid (NULL) pointer instance
return info.invoke(*args, **kwargs)
/usr/lib/python3/dist-packages/gi/types.py:47: Warning: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
return info.invoke(*args, **kwargs)

(.:10935): Gtk-CRITICAL **: gtk_widget_add_events: assertion `GTK_IS_WIDGET (widget)' failed
/usr/lib/python3/dist-packages/gi/types.py:47: Warning: g_object_set_data: assertion `G_IS_OBJECT (object)' failed
return info.invoke(*args, **kwargs)
/usr/lib/python3/dist-packages/gi/types.py:47: Warning: g_object_set_qdata: assertion `G_IS_OBJECT (object)' failed
return info.invoke(*args, **kwargs)

(.:10935): Gdk-CRITICAL **: gdk_display_get_default_screen: assertion `GDK_IS_DISPLAY (display)' failed

(.:10935): Gtk-CRITICAL **: gtk_invisible_new_for_screen: assertion `GDK_IS_SCREEN (screen)' failed

(.:10935): Gtk-CRITICAL **: gtk_widget_add_events: assertion `GTK_IS_WIDGET (widget)' failed

(.:10935): Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed

(.:10935): Gtk-CRITICAL **: gtk_selection_convert: assertion `GTK_IS_WIDGET (widget)' failed

最佳答案

您不只是在处理 Python 2 和 Python 3——事实上,在这种情况下这无关紧要。 重要的是第一个示例使用的是 PyGTK,即 GTK2,第二个示例使用的是 PyGObject,即 GTK3。

因为 GTK3 使用 gobject introspection对于 Python,一些在 PyGTK 中手动维护的魔法不存在。如果您查看 C API for the Clipboard你会看到 Gtk.Clipboard.get() 有一个必需的参数来识别剪贴板。 gtk_clipboard_get_for_display() 的引用资料对此进行了解释.

长话短说,GTK3中正确的代码应该是这样的:

from gi.repository import Gtk, Gdk
cb = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
content = cb.wait_for_text()

关于python - 如何在 Ubuntu 上的 GTK3 (GI) 和 Python 3 中获取剪贴板内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13207897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com