2012-07-02 16 views
18

Ich habe mich in den Quellcode von python-mpdor und es wird erwähnt, dass esWas genau ist Glib und Gobject?

ist

gobject-basierte, für die einfache Event-Handling (in der High-Level-Client Klasse).

Also, kann mir jemand in simpler terms erklären, was genau sind Glib und GObject und wie interagieren sie miteinander und welche Rolle sie in Fall spielt Handhabung.

Ich habe versucht, auf der Suche nach Glib and GObject, aber ich habe keine grundlegende Erklärung dafür gefunden. Alle Erklärungen, die ich gefunden habe, sind technisch sehr technisch, ich meine nicht für Anfänger.

Auch kann jemand auf einige beginner Tutorials/Artikel über Glib und GObject zeigen.

Antwort

30

GLib und GObject sind 2 separate C-Bibliotheken, aus denen die GTK + GUI-Toolkit wird (unter anderem) gebaut.

Da C eine untergeordnete Sprache ist, bietet GLib eine Menge grundlegender Funktionalität, wie die mit Python integrierten Dienstprogramme (Dateieingabe/-ausgabe, Zeichenfolgenmanipulation, Speicherverwaltung, Threading usw.).

Da C keine objektorientierte Sprache ist, stellt GObject ein C-basiertes Objektsystem zur Verfügung, das Eigenschaften und Vererbung enthält (wiederum bereits in Python integriert). In Python verwenden Sie GLib nur selten direkt (weil Python die meisten Funktionen eingebaut hat), aber GObject ist abhängig von GLib.

Alle GObject-basierten Bibliotheken unterstützen Sprachbindungen zu anderen Sprachen wie Python.

Auf den Punkt Ihrer Frage stellt GObject ein Ereignissystem zur Verfügung, das als "Signale" bekannt ist. Jedes von GObject abgeleitete Objekt kann Signale "aussenden", um Benachrichtigungen über ein auftretendes Ereignis zu senden. Die Klasse MPDProtocolClient in python-mpdor ist von GObject abgeleitet und kann daher Signale aussenden. Anwendungen "verbinden" Funktionen mit diesen Signalen. F

Zum Beispiel zeigen die README dieses Beispiel:

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() 

In diesem Fall wird die Funktion mit dem Namen notify „verbunden“ ist zu dem "mixer-change" Signal, das diese Funktion bedeutet, dass jederzeit die Client „aussendet aufgerufen werden "Dieses Signal. Der Aufruf gobject.MainLoop().run() ruft eine "main event loop" (im Grunde eine Endlosschleife) auf, die ein Standardkonzept in der ereignisgesteuerten Programmierung ist.

Sie werden wahrscheinlich nicht viele GObject/Python Tutorials finden, wenn Sie jedoch ein wenig Python/GTK + Grundlagen lernen, dann werden Sie wahrscheinlich die Konzepte der Event Loop, Signale und Rückrufe signalisieren. (Es sieht so aus, als ob python-mpdor GTK + 2 verwendet, was PyGTK im Gegensatz zu neueren GTK + 3 ist, was PyGObject ist).

Viel Glück.

+0

+1 Sehr schöne Erklärung. – RanRag