GTK和PYGTK的区别

21

许多程序员通过以下方式同时导入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个回答

17

pygtkpython-gobject提供。 gtkpython-gtk2提供。

pygtk提供了pygtk.require函数,它允许您要求安装某个特定版本的gtk(或更高版本)。例如:

import pygtk
pygtk.require('2.0')

只导入 gtk 是可行的,但如果他们的 gtk 版本较旧,则在其他人的机器上运行你的程序可能会出现意外情况。


那么 pygtk 只是用来确保安装了特定版本的 gtk 吗? - xRobot
3
如果你打开Python REPL并键入import pygtk;pygtk.__file__,你会找到这个包的路径。它可能是这样的:/usr/lib/pymodules/python2.6/pygtk.pyc。如果你把路径末尾的c去掉,并查看文件/usr/lib/pymodules/python2.6/pygtk.py,你会发现它仅定义了三个函数,它们都与确定和需要版本有关。仅仅通过查看这个文件,我就能推测/得出pygtk的用途。 - unutbu

5
我曾经对pygtkgtk感到困惑,因为我的测试应用程序在使用gtk时可以顺利工作。

我现在意识到,gtk 指的是包含与Gtk+2.x库绑定的Python模块PyGTK。而pygtk是另一个模块,也是PyGTK的一部分,它可以(但不需要)用于确保特定版本的Gtk+库。

gtkpytk模块仅适用于Python 2。对于Python 3,您需要通过使用GObject Introspection模块的gi来使用Gtk+

Python GObject Introspection 模块(也称为 gigi.repository)是C库(使用 GObject )和语言绑定之间的中间件层。它实际上是从底层C源代码自动生成Python绑定。 GObjectGLib对象系统,而GLib则为使用C编写的库和应用程序提供核心应用程序构建块。GObjectGTK+提供基于面向对象C的API和其他已编译或解释语言(如Python)的自动透明API绑定。

GTK3+库使用GObject,但GTK2+库不使用。这意味着您无法在Python 3版本中使用Gtk2+。

对于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()))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接