GTK和PYGTK的区别

xRo*_*bot 18 python gtk pygtk gtk2

许多程序员以这种方式导入gtk和pygtk:

import gtk
import pygtk
Run Code Online (Sandbox Code Playgroud)

我只使用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()
Run Code Online (Sandbox Code Playgroud)

所以...问题是:GTK和PYGTK的区别是什么?

unu*_*tbu 16

pygtk由...提供python-gobject. gtk由...提供python-gtk2.

pygtk提供pygtk.require允许您要求安装某个版本的gtk(或更高版本)的功能.例如

import pygtk
pygtk.require('2.0')
Run Code Online (Sandbox Code Playgroud)

gtk只能进行导入,但如果他们的gtk版本较旧,则您的程序可能无法在其他人的计算机上正常工作.

  • @xRobot:是的.如果打开Python REPL,则输入`import pygtk; pygtk .__ file__`你会找到包裹的路径.它可能类似于`/ usr/lib/pymodules/python2.6/pygtk.pyc`.如果你从路径的末尾取出`c`,并查看文件`/ usr/lib/pymodules/python2.6/pygtk.py`,你会发现它只定义了三个函数,它们都必须确定和要求版本.只是通过查看这个文件,我猜测/得出`pygtk`是什么. (3认同)

sta*_*fry 5

pygtk我对vs感到困惑,gtk因为我的测试应用程序与gtk.

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

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

Python GObject Introspection模块(又名gi或)是 C 库(使用GObjectgi.repository )和语言绑定之间的中间件层。本质上,它从底层 C 源代码自动生成 Python 绑定。GObjectGLib对象系统,其中GLib为用 C 编写的库和应用程序提供了核心应用程序构建块。GObjectGTK+提供了面向对象的基于 C 的 API 以及与其他编译或解释语言(例如 Python)的自动透明 API 绑定。

GTK3+ 库使用Gobject,但 GTK2+ 库不使用。这意味着您不能将 Gtk2+ 与 Python 版本 3 一起使用。

对于 Python 2 你会使用

import pygtk
pygtk.require('2.0')
import gtk
Run Code Online (Sandbox Code Playgroud)

要不就

import gtk
Run Code Online (Sandbox Code Playgroud)

对于 Python 3 你需要

import gi
gi.require_version('Gtk','3.0')
from gi.repository import Gtk
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式验证版本:

对于 Gtk+ 2(Python 2 或 3)

print("PyGTK %d.%d.%d Gtk+ %d.%d.%d" % (gtk.pygtk_version + gtk.gtk_version))
Run Code Online (Sandbox Code Playgroud)

对于 Gtk+ 3(仅限 Python 3)

print("Gtk %d.%d.%d" % (Gtk.get_major_version(),
                                         Gtk.get_minor_version(),
                                         Gtk.get_micro_version()))
Run Code Online (Sandbox Code Playgroud)