关于python 3.x:使用Python3和GTK3出现错误”找不到Gtk的任何类型库”

Error “Could not find any typelib for Gtk” with Python3 and GTK3

我无法使Python3与GTK3一起使用。我处于集群环境中,并且从源头重新编译了所有内容。

当我运行一个简单的示例时:

1
2
3
4
5
6
from gi.repository import Gtk

win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

我遇到以下错误:

1
2
3
4
5
    ERROR:root:Could not find any typelib for Gtk
    Traceback (most recent call last):
      File"gtk3_example.py", line 2, in
        from gi.repository import Gtk
    ImportError: cannot import name 'Gtk'

通常,您还需要安装其他软件包,具体取决于您要进行内省。我发现至关重要的一个是gir1.2-gtk-3.0(或2.0,具体取决于您针对哪个版本进行编码)。


问题是由于gobject-introspection中未引用的GTK3的编译版本。

通过在gobject-introspection

中列出.typelib文件来检查问题很简单

1
2
3
4
5
6
7
    $ which g-ir-scanner
    /Produits/publics/x86_64.Linux.RH6/gobject-introspection/1.40.0/bin/g-ir-scanner

    $ ls /Produits/publics/x86_64.Linux.RH6/gobject-introspection/1.40.0/lib/girepository-1.0/
    cairo-1.0.typelib     fontconfig-2.0.typelib  GIRepository-2.0.typelib  GModule-2.0.typelib  win32-1.0.typelib   xlib-2.0.typelib
    DBus-1.0.typelib      freetype2-2.0.typelib   GL-1.0.typelib            GObject-2.0.typelib  xfixes-4.0.typelib  xrandr-1.3.typelib
    DBusGLib-1.0.typelib  Gio-2.0.typelib         GLib-2.0.typelib          libxml2-2.0.typelib  xft-2.0.typelib

应该通过使用配置选项--enable-introspection=yes重新编译GTK(及其依赖项)来解决该问题。


尝试使用以下代码:

1
2
3
import gi
gi.require_version("Gtk","3.0")
from gi.repository import GTK