Ответ 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).
Удачи.