39

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

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

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

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

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

4

2 に答える 2

57

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

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は、PyGObjectである新しいGTK + 3とは対照的に、PyGTKであるGTK + 2を使用しているようです)。

幸運を。

于 2012-07-02T23:31:09.760 に答える
2

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

于 2019-08-20T23:13:24.953 に答える