Ошибка Не удалось найти библиотеку типов для Gtk с Python3 и GTK3

Я не могу заставить Python3 работать с GTK3. Я нахожусь в контексте кластера, и у меня все было перекомпилировано из исходников.

Когда я запускаю простой пример:

from gi.repository import Gtk

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

У меня есть следующая ошибка:

    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'

person Michael Dussere    schedule 30.07.2014    source источник


Ответы (3)


Обычно есть дополнительные пакеты для установки в зависимости от того, что вы хотите изучить. Я обнаружил, что решающим является gir1.2-gtk-3.0 (или 2.0, в зависимости от того, с какой версией вы работаете).

person dragon788    schedule 30.04.2016
comment
Изначально моя проблема заключалась в том, что мне приходилось устанавливать из исходников весь программный стек со своими зависимостями. Таким образом, решение «найти хороший пакет» не было вариантом. Но я согласен, что в более классических ситуациях это может быть полезно. - person Michael Dussere; 02.05.2016

Проблема связана с скомпилированной версией GTK3, на которую не было ссылок в gobject-introspection.

Проверить проблему просто, перечислив .typelib файлов в gobject-introspection.


    $ 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

Проблема должна быть решена путем перекомпиляции GTK (и его зависимостей) с опцией конфигурации --enable-introspection=yes.

person Michael Dussere    schedule 30.07.2014
comment
А как перекомпилировать GTK? - person rakesh.sahu; 02.07.2019
comment
Прошло какое-то время, но я думаю, что это была довольно классическая процедура: получить tgz, настроить, сделать, сделать и установить. --enable-introspection=yes относится к параметру конфигурации. Вы уверены, что не можете решить свою проблему с помощью системы упаковки? (перекомпилировать все это было больно, это я хорошо помню) - person Michael Dussere; 03.07.2019
comment
Я работал на Mac и установил зависимости с помощью brew install, я не могу их перекомпилировать. - person rakesh.sahu; 04.07.2019
comment
Я не эксперт по Mac, поэтому я не могу вам помочь. Перекомпиляция всегда возможна, но это довольно сложно, если вы к этому не привыкли (настроить среду разработки, получить все зависимости вручную и т. д.). Возможно, вам будет проще использовать виртуальную машину или докер. - person Michael Dussere; 08.07.2019

Попробуйте использовать следующий код:

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import GTK
person Hoss    schedule 18.07.2018
comment
Как/почему это решает проблему? Это очень хорошо может решить это, но если вы хотя бы частично не объясните логику того, почему и как, это не будет полным ответом. Спасибо! - person Max von Hippel; 18.07.2018