完全被PyObject、PyGTK和GNOME 3搞糊涂了

15

我安装了Fedora 15系统,使用Python3和GObject开发桌面应用程序,因为PyGTK看起来已经过时:

PyGTK 2.24.0发布于2011年4月1日,支持GTK+ 2.24 API。如果您是新用户并希望使用GTK+开发Python应用程序,则建议使用PyGObject中提供的GObject-Introspection功能。

PyGObject 2.26.0已发布,这是2.26.x系列中的第一个稳定版本,并引入了内省和Python 3的初始支持。

来源:http://www.pygtk.org/

我打算使用Python3和PyGObject来开发新的Gnome3应用程序!我访问了PyGObject页面,并看到最新的稳定版本是2.28(自2.26以来支持Python3),但是只有python2的绑定可用于Fedora。

这是怎么回事呢?

我查看了PyGobject 演示文稿示例,查看了源代码,发现所有的代码都是使用pygtk和pygtk.require('2.0')编写的,而不是使用pygobject。

我错过了什么吗?我该如何使用Python3和PyGObject来开发Gnome 3应用程序呢?

4个回答

8
更新:这里有一些文档:Python GTK+ 3教程。但是它仍然缺少与GIO相关的内容。
虽然不是不可能,但由于你正在谈论最新一代GTK (&co)绑定,事情肯定会落后一点。开发者的努力大多集中在实际开发上,而文档、示例等往往要晚得多才能赶上。这就是自由软件的现实:/请记住,PyGI也是最近合并到PyGObject中的,因此还有另一个需要编辑的不连续性。
所以我的回答是:
  1. 订阅PyGTK/PyGObject邮件列表,请求一些指针或参考资料或手把手教学,然后从那里开始。与开发人员保持持续联系确实是跟上事情进展的唯一途径。
  2. 将这个时刻(和那家伙的面部表情)藏在脑海的一个角落里,这样当你掌握了这些东西时,你,是的,先生,你可以写下一些东西,并提交给下一个不幸处境的人作为文档。
(就我个人而言,我迫不及待地想抽出一些时间尝试使用新的API来组装一些东西,但我正在努力推迟到Gnome 3进入Debian。我热切地期待着在我的脸上戴上这样的表情。)

1
我还要指出的是,并非所有库都可用 GObject-Introspection。 - fpmurphy
2
三年过去了,文档仍然很糟糕。 - Basic

4

开发者.gnome.org上的平台演示完全采用GTK 3和GNOME 3编写。目前只有两个Python版本可用,其他版本尚未翻译,但这应该可以帮助您入门。

不幸的是,即使在GTK 3普及多年后,您仍会在网上找到PyGTK 2教程,因为人们在兴奋的冲动中编写它们,然后再也没有更新它们。也没有人会将它们删除,因为它们可能仍然有价值,您只需要更改X、Y和Z就可以使其与GTK 3一起工作…这就是为什么您仍然可以在网上找到GTK 1.2的C语言教程。

因此,如果您找到了一个PyGTK 2教程,最好给托管它的人写一封电子邮件,告诉他们它已经过时了。更好的做法是,更新GTK 3教程并发送给他们新版本!毕竟,这是开源的。


一半的时间,它们并不过时:它们能够正常工作,而迁移到GTK3则是一件非常痛苦的事情。 - totaam

2
尽管使用了introspection,但如果注释掉pygtk的导入,它们仍然可以运行。我怀疑这只是一个疏忽,最近我花了很多时间尝试移植一些东西。判断的方法在于代码本身如何导入gtk。
#import pygtk
#pygtk.require('2.0')
from gi.repository import Gtk, GLib, GObject, GdkPixbuf, Gio, Pango

如果代码使用大写字母G进行GTK操作,那么它肯定是使用内省技术的。 例如:

#a pygtk window
awindow = gtk.Window()
#an introspection window
awindow = Gtk.Window()

1
我现在所做的是开发一个 GTK+ 应用程序,需要从 这里 下载并安装 Anaconda3,然后使用以下命令创建一个新的虚拟环境:
conda create --name xld-attribute-value-adder python=3.4 pip setuptools pygobject

我添加了pip和setuptools,因为virtualenv在创建虚拟环境时会添加它们。我知道可以使用pip来安装软件包,但setuptools的名称意味着它可以用于类似的用途。
然后Anaconda告诉我找不到PyGObject,并且我可以使用binstar进行搜索(太好了,又要记住另一个工具!)如下:
binstar search -t conda pygobject

然而,这会导致多个搜索结果:
Name                      |  Version | Package Types   | Platforms      
 ------------------------- |   ------ | --------------- | ---------------
 ???/pygobject3            |   3.12.0 | conda           | linux-64       
                                      : None
 KristanArmstrong/pygobject |   3.14.0 | conda           | win-64         
                                      : PyGObject is a Python extension module that gives clean and consistent access to the entire GNOME software platform through the use of GObject Introspection.
 fallen/pygobject          |   3.14.0 | conda           | linux-64, linux-32
                                      : PyGObject is a Python extension module that gives clean and consistent access to the entire GNOME software platform through the use of GObject Introspection.
 jeanconn/pygobject        |          | conda           | linux-64       
                                      : None
 pkgw/pygobject3           |   3.12.0 | conda           | linux-64       
                                      : None
 ska/pygobject             |   2.20.0 | conda           | linux-64       
                                      : Pipeline running tools
 vgauthier/pygobject       |   3.10.0 | conda           | osx-64         
                                      : Python Bindings for GLib/GObject/GIO/GTK+

那么我应该安装哪一个呢?当然是最新和最稳定的...其中一些不符合要求,因为它们不适用于我的linux-64系统。我想进行搜索,只显示适用于我的系统的软件包,所以我找到了一些帖子告诉我,在Anaconda网站上输入以下内容即可进行此类搜索:
access:public platform:linux-64 pygobject

现在我只看到4个结果,仍然不知道哪一个是最新的,或者应该使用哪一个。Anaconda网站也没有告诉我这些存储库何时被更新。因此,我认为版本号最高的那个应该是最新的。事实上,我发现了一个网站,它声称PyGObject 3.14版本是2014年9月22日发布的,或者至少该网站上的帖子是从那个日期。

我创建了虚拟环境,没有使用pygobject参数:

conda create --name xld-attribute-value-adder python=3.4 pip setuptools

然后激活它:
source activate xld-attribute-value-adder

然后使用以下命令安装了PyGObject:
conda install -c https://conda.anaconda.org/fallen pygobject

接着,我在我的IDE PyCharm中更改了该项目的Project Interpreter(是的,我目前正在使用PyCharm进行此项目),将其更改为新创建的虚拟环境的Python 3.4二进制文件:

(Project Directory)/bin/python3.4

接下来我打开一个Python文件,其中包含以下代码:

from gi.repository import Gtk

PyCharm目前无法找到Gtk或存在其他问题,因此我需要点击下划线红色的Gtk,然后在上面按Alt+Enter,选择创建二进制存根。

经过这些步骤,它最终工作了:)


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