2010-10-18 3 views
18

многие программисты импортировать как 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?

ответ

15

pygtk Предоставлено python-gobject. gtk предоставляется по номеру python-gtk2.

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

import pygtk 
pygtk.require('2.0') 

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

+0

Так PyGTK используется только для того требует, что установлена ​​определенная версия GTK? – xRobot

+3

@ xRobot: Да. Если вы откроете Python REPL и введите 'import pygtk; pygtk .__ file__' вы найдете путь к пакету. Это может быть что-то вроде '/ usr/lib/pymodules/python2.6/pygtk.pyc'. Если вы берете 'c' с конца пути и заглядываете в файл'/usr/lib/pymodules/python2.6/pygtk.py', вы обнаружите, что он определяет только три функции, и все они должны делать с определением и требованием версий. Просто взглянув на этот файл, я предполагаю/завершаю, для чего «пигтк». – unutbu

+0

спасибо за полезные советы;) – xRobot

1

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

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

Модули gtk и pytk применяются только к Python 2. Для Python 3 вам необходимо использовать Gtk+ через модуль giGObject 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())) 
Смежные вопросы