Я был смущен pygtk
vs gtk
, потому что мое тестовое приложение отлично работало с gtk
.
Теперь я понимаю, что gtk
означает PyGTK, модуль Python, содержащий привязки к библиотеке 2.x. 0x2.x. pygtk
- еще один модуль, также входящий в состав PyGTK, который может (но не обязательно) использоваться для обеспечения определенной версии библиотеки Gtk+.
Модули gtk
и pytk
применяются только к Python 2. Для Python 3 вам необходимо использовать Gtk+ через модуль gi
GObject Introspection.
Модуль Python GObject Introspection (так называемый gi
или gi.repository
) представляет собой слой промежуточного слоя между библиотеками C (с использованием GObject) и языковых привязок. По сути, он автогенерирует привязки Python из исходного исходного кода C. GObject - GLib Объектная система, где GLib содержит основные строительные блоки для библиотек и приложений, написанные на C. GObject предоставляет GTK+ объектно-ориентированными API-интерфейсами на основе C и автоматическими прозрачными связями API с другими скомпилированными или интерпретируемыми языками (такими как Python).
В библиотеке GTK3 + используется Gobject, но библиотеки GTK2 + этого нет. Это означает, что вы не можете использовать Gtk2 + с Python версии 3.
Для Python 2 нужно использовать
import pygtk
pygtk.require('2.0')
import gtk
или просто
import gtk
Для Python 3 вам нужно
import gi
gi.require_version('Gtk','3.0')
from gi.repository import Gtk
Вы можете проверить версии с:
Для Gtk + 2 (Python 2 или 3)
print("PyGTK %d.%d.%d Gtk+ %d.%d.%d" % (gtk.pygtk_version + gtk.gtk_version))
Для Gtk + 3 (Python 3 только)
print("Gtk %d.%d.%d" % (Gtk.get_major_version(),
Gtk.get_minor_version(),
Gtk.get_micro_version()))
Так PyGTK используется только для того требует, что установлена определенная версия GTK? – xRobot
@ xRobot: Да. Если вы откроете Python REPL и введите 'import pygtk; pygtk .__ file__' вы найдете путь к пакету. Это может быть что-то вроде '/ usr/lib/pymodules/python2.6/pygtk.pyc'. Если вы берете 'c' с конца пути и заглядываете в файл'/usr/lib/pymodules/python2.6/pygtk.py', вы обнаружите, что он определяет только три функции, и все они должны делать с определением и требованием версий. Просто взглянув на этот файл, я предполагаю/завершаю, для чего «пигтк». – unutbu
спасибо за полезные советы;) – xRobot