Разница между GTK и PYGTK


Многие программисты импортируют как gtk, так и pygtk следующим образом:

import gtk
import pygtk

Я создал простую программу, использующую только gtk, и она работает:

import gtk

window = gtk.Window()
window.set_size_request(800, 700)
window.set_position(gtk.WIN_POS_CENTER)
window.connect("destroy", gtk.main_quit)

button = gtk.Button("Vai")
button.set_size_request(30, 35)
button.connect("clicked", naviga)
testo = gtk.Entry()

h = gtk.HBox()
h.pack_start(testo)
h.pack_start(button)

window.add(h)
window.show_all()
gtk.main()

Итак... возникает вопрос: в чем разница между GTK и PYGTK ?

2 19

2 ответа:

pygtk обеспечивается python-gobject. gtk обеспечивается python-gtk2.

pygtk предоставляет функцию pygtk.require, которая позволяет требовать установки определенной версии gtk (или лучше). Например

import pygtk
pygtk.require('2.0')

Возможен только импорт gtk, но ваша программа может не работать должным образом на чужой машине, если их версия gtk старше.

Я был смущен pygtk vs gtk, потому что мое тестовое приложение отлично работало с gtk.

Теперь я понимаю, что gtk означает PyGTK, модуль Python, содержащий привязки к Gtk+ 2.библиотека X. pygtk - это еще один модуль, также входящий в состав PyGTK, который может (но не должен) использоваться для обеспечения определенной версии библиотеки Gtk+.

Модули gtk и pytk применяются только к Python 2. Для Python 3 вам нужно использовать Gtk+ через gi модуль GObject Introspection.

Модуль PythonGObject 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()))