GTK和PYGTK的区别

21 投票
2 回答
5865 浏览
提问于 2025-04-16 05:41

很多程序员都是这样同时导入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 个回答

5

我之前对 pygtkgtk 感到困惑,因为我的测试应用在 gtk 下运行得很好。

现在我明白了,gtk 指的是 PyGTK,这是一个 Python 模块,它包含了与 Gtk+ 2.x 库的连接。pygtk 是另一个模块,同样属于 PyGTK,可以(但不一定需要)用来确保使用特定版本的 Gtk+ 库。

需要注意的是,gtkpytk 模块只适用于 Python 2。对于 Python 3,你需要通过 gi GObject Introspection 模块来使用 Gtk+

Python 的 GObject Introspection 模块(也叫 gigi.repository)是 C 库(使用 GObject)和语言绑定之间的中间层。简单来说,它会根据底层的 C 源代码自动生成 Python 的连接代码。GObjectGLib 对象系统,而 GLib 为用 C 编写的库和应用程序提供了核心构建模块。GObjectGTK+ 提供了面向对象的 C 基础 API,并且可以自动透明地将 API 连接到其他编译或解释的语言(比如 Python)。

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()))
17

pygtk 是由 python-gobject 提供的。

gtk 是由 python-gtk2 提供的。

pygtk 提供了一个叫 pygtk.require 的功能,这个功能可以让你指定需要安装某个版本的 gtk(或者更高版本)。比如说:

import pygtk
pygtk.require('2.0')

只导入 gtk 是可以的,但如果别人的电脑上 gtk 的版本比较旧,你的程序可能就无法正常运行。

撰写回答