Я полностью запутался с PyObject, PyGTK и GNOME 3, а также - PullRequest
15 голосов
/ 18 июня 2011

Я установил Fedora 15, чтобы использовать Python3 и GObject для разработки настольного приложения, потому что PyGTK выглядит устаревшим:

PyGTK 2.24.0, выпущенный в пятницу 01 апреля 2011 года Рафаэлем Вилларом Берком PyGTK 2.24.0был выпущен.Это стабильный выпуск, поддерживающий GTK + 2.24 API. Новым пользователям, желающим разрабатывать приложения Python с использованием GTK +, рекомендуется использовать функции GObject-Introspection, доступные в PyGObject. [...]

PyGobject 2.26.0 имеетбыл освобожден. Это первый стабильный выпуск в серии 2.26.x, в котором представлена ​​начальная поддержка интроспекции и Python 3 .[...]

Источник: http://www.pygtk.org/

Я думал STRIKE! , используя Python 3 и PyGObject для разработки новых приложений Gnome3!Я посетил PyGObject Page и увидел, что новейшей стабильной версией является 2.28 (и Python3 поддерживается начиная с 2.26), которая установлена ​​в Fedora, НО только с привязками python2 .

Какого черта?

Я посетил PyGobject demos и Примеры на Сайте, и посмотрел на исходный код и каждый код, который там используется, используя pygtk + pygtk.require ('2.0') вместо pygobject.

Я что-то упустил?Как я могу использовать Python3 и PyGObject для разработки приложений Gnome 3?

Ответы [ 4 ]

8 голосов
/ 20 июня 2011

Обновление: здесь есть немного документации: Python GTK + 3 Tutorial .Он по-прежнему не имеет ничего общего с GIO и т. Д.

Это не ... э-э, невозможно ... но поскольку вы говорите о привязках GTK последнего поколения (& co), вещи обязательно должны бытьнемного позади.Усилия разработчиков в основном направлены на фактическую разработку, а документация, примеры и т. Д., Как правило, догоняют гораздо позже.Такова реальность свободного программного обеспечения: / Помните, что PyGI был объединен и с PyGObject сравнительно недавно, поэтому есть еще один разрыв для редактирования из истории.

Итак, мой ответ вам:

  1. Подпишитесь на списки рассылки PyGTK / PyGObject, попросите указатели, справочные материалы или материалы для рук и перейдите оттуда.Постоянный канал для разработчиков - это действительно единственный способ оставаться в курсе событий.
  2. Держите этот момент (и выражение лица этого парня) спрятанным в уголке вашего мозга, чтобы, когда вы всталичтобы ускориться, вы - да вы , сэр, ВЫ - можете записать некоторые из этих вещей и представить их в качестве документации для следующей несчастной души, которая находится в этой ситуации.

(Лично я не могу дождаться, чтобы выделить какое-то время, чтобы попытаться соединить что-то с новым API, но я пытаюсь отложить до появления Gnome 3 в Debian. Я с нетерпением жду, когда буду носить такие выражения на мое лицо.)

4 голосов
/ 20 июня 2011

Демоверсии платформы на developer.gnome.org полностью написаны на GTK 3 и GNOME 3. На данный момент для Python доступно только два, остальные еще не переведены, но это должен начать.

К сожалению, даже спустя годы после того, как GTK 3 стал обычным явлением, вы все равно будете сталкиваться с онлайн-уроками PyGTK 2, потому что люди пишут их с воодушевлением и никогда больше не обновляют. Никто не будет их снимать, потому что в них все еще может быть ценный материал, и вам нужно всего лишь изменить X, Y и Z, чтобы он работал с GTK 3 ... Вот почему вы все еще можете найти учебники по C для GTK 1.2 онлайн.

Так что, если вы найдете учебник по PyGTK 2, вам лучше написать электронное письмо тому, кто его размещает, сообщив, что оно устарело. Более того, обновите учебник для GTK 3 и отправьте им новую версию! В конце концов, это открытый исходный код.

2 голосов
/ 26 июня 2011

несмотря на импорт pygtk pygtk.require ('2.0'), они написаны в самоанализе, если вы закомментируете импорт pygtk, который все еще выполняется, я подозреваю, что это просто недосмотр, я потратил немало времени, пытаясьпортирование некоторых вещей в последнее время

способ сказать, как код импортирует сам gtk

#import pygtk
#pygtk.require('2.0')
from gi.repository import Gtk, GLib, GObject, GdkPixbuf, Gio, Pango

означает, что он использует самоанализ, если код делает вещи gtk с большой буквы G, то и его самоанализ тоже :)например

#a pygtk window
awindow = gtk.Window()
#an introspection window
awindow = Gtk.Window()
1 голос
/ 03 августа 2015

Что я сделал сейчас для разработки GTK+ приложения, так это скачал и установил Anaconda3 из здесь , а затем создал новую виртуальную среду, используя:

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

(Iдобавлены 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 имеет 22 Sep 2014 или, по крайней мере, сообщение на этом веб-сайте относится к этой дате.

Я создал виртуальную средубез аргумента 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

После этого я изменил Project Interpreter этого проекта в моей IDE PyCharm (да, я сейчас использую PyCharm для этого проекта) в Python 3.4 двоичный файл моей недавно созданной виртуальной среды:

(Project Directory)/bin/python3.4

Затем я открываю pythonфайл, который содержит строку:

from gi.repository import Gtk

PyCharm еще не находит Gtk или имеет какую-то другую проблему, поэтому мне нужно было щелкнуть по красной подчеркнутой Gtk и Alt+Enter и выбрать создание двоичного файлазаглушки для него.

После всего, что это наконец-то сработало:)

...