web-dev-qa-db-ja.com

GLibとGObjectとは正確には何ですか?

python-mpdor のソースコードを調べていましたが、

gobjectベース、イベント処理を容易にします(高レベルのクライアントクラスで)。

誰かが簡単な用語で私にGlibGObjectとは正確に何であり、それらはどのように相互作用するかを説明できますか?そしてそれがイベント処理でどのような役割を果たしているか。

GlibGObjectを検索してみましたが、基本的な説明が見つかりませんでした。私が見つけたすべての説明は非常に技術的であり、技術的には初心者には適していないことを意味します。

また、誰かがGlibGObjectに関するいくつかの初心者チュートリアル/記事を指すことができますか?.

28
RanRag

GLibとGOBjectは、GTK + GUIツールキットが構築される2つの別個のCライブラリです(とりわけ)。

Cは低水準言語であるため、GLibは、Python(ファイル入出力、文字列操作、メモリ管理、スレッド化)に組み込まれているものと同様のユーティリティのような多くの基本機能を提供します。など)。

Cはオブジェクト指向言語ではないため、GObjectはプロパティと継承を含むCベースのオブジェクトシステムを提供します(ここでも、Pythonすでに組み込まれています)。Pythonでは、GLibを直接使用することはめったにありません( Pythonにはその機能のほとんどが組み込まれています)が、GObjectはGLibに依存しているためです。

すべてのGObjectベースのライブラリは、Pythonなどの他の言語への言語バインディングをサポートするように設計されています。

あなたの質問のポイントに、GObjectは「シグナル」として知られているイベントシステムを提供します。 GObjectから派生したオブジェクトはすべて、シグナルを「送信」して、発生したイベントの通知を送信できます。 _python-mpdor_のMPDProtocolClientクラスは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は、PyGObjectである新しいGTK + 3とは対照的に、PyGTKであるGTK + 2を使用しているようです)。

幸運を。

38
Micah Carrick

GObjectは、COM-コンポーネントオブジェクトモデルの実装です。これは、このオブジェクトの「メソッド」を呼び出すことができることを意味します。ヘッダーファイルにメソッド宣言を「インクルード」せずにシグナルを送信してリンクします。当初は、さまざまなPLの言語バインディングを作成するためのシステムとして作成されましたが、プラグインシステムのベースとしても使用されます。

1
Aleksandr