Подтвердить что ты не робот

Что такое GLib и GObject?

Я искал исходный код python-mpdor, и он упоминает, что это

на основе gobject, для легкой обработки событий (в клиенте высокого уровня класс).

Может ли кто-нибудь объяснить мне в простых терминах, что именно представляют собой Glib и GObject и как они взаимодействуют друг с другом и какую роль они играют в обработке событий.

Я попытался найти Glib и GObject, но я не нашел никакого базового объяснения этому. Все объяснения, которые я нашел, являются очень техническими и техническими, я имею в виду, не подходит для начинающих.

Кроме того, кто-то может указать на некоторые учебные пособия/статьи для начинающих о Glib и GObject.

4b9b3361

Ответ 1

GLib и GOBject - две отдельные библиотеки C, из которых построен инструментарий GUI GTK+ (среди прочего).

Поскольку C - это язык более низкого уровня, GLib предоставляет множество базовых функций, таких как утилиты, аналогичные тем, которые встроены в Python (ввод/вывод файлов, манипуляции со строками, управление памятью, многопоточность и т.д.).

Поскольку C не является объектно-ориентированным языком, GObject предоставляет объектную систему на основе C, которая включает свойства и наследование (опять же, уже встроено в Python). В Python вы редко используете GLib напрямую (потому что Python обладает большей частью этой встроенной функциональности), но GObject зависит от GLib.

Все библиотеки на основе GObject разработаны для поддержки языковых привязок к другим языкам, таким как Python.

Что касается вашего вопроса, GObject предоставляет систему событий, известную как "сигналы". Любой объект, полученный из GObject, может "излучать" сигналы для отправки уведомлений о происходящем событии. Класс MPDProtocolClient в python-mpdor является производным от GObject и, следовательно, он может излучать сигналы. Приложения "подключают" функции к этим сигналам. F

Например, README показывает этот пример:

import gobject
import mpdor

def notify(client, vol):
    print "mpd volume is at ", vol + "%"

client = mpdor.client.Client()
client.connect("mixer-change", notify)
gobject.MainLoop().run()

В этом случае функция с именем notify "подключена" к сигналу "mixer-change", что означает, что функция будет вызываться каждый раз, когда клиент "излучает" этот сигнал. Вызов gobject.MainLoop().run() входит в "основной цикл событий" (в основном бесконечный цикл), который является стандартной концепцией в программировании, управляемом событиями.

Вы, вероятно, не найдете много учебных пособий по GObject/Python, однако, если вы изучите немного основ Python/GTK+, то, скорее всего, вы поймете концепции цикла событий, сигналов и обратных вызовов сигналов., (Похоже, что python-mpdor использует GTK+ 2, который будет PyGTK, а не более новый GTK+ 3, который является PyGObject).

Удачи.

Ответ 2

GObject является реализацией COM - компонентной объектной модели. Это означает, что вы можете вызывать "методы" этого объекта - сигналы без "включения" объявления методов в заголовочный файл и связывания. Первоначально он был создан как система для создания языковых привязок для разных PL, но также он использовался в качестве основы для систем плагинов.