2

PyGTKのGObjectクラスから派生する場合、PythonでのGObjectのサブクラス化__gproperties__で説明されているように、 dictやdo_get_property/do_set_propertyメソッドを使用して、CのようにGObjectプロパティを定義できます。これは、Pythonでデコレータを使用する前に作成されたものであることに注意してください。@property

notify::property-nameGObjectプロパティには、オブジェクトのシグナルに接続して、プロパティが変更されるたびに通知を受信できるという利点があります。それ以外に、Pythonの@propertyデコレータの代わりにGObjectプロパティを使用する正当な理由はありますか?

4

2 に答える 2

1

それらを使用しないのはなぜですか?Python バインディングによって提供される簡略化されたバージョンでは、GObject プロパティの定義は Python プロパティの定義とそれほど違いはありません。

そうは言っても、通知以外にもいくつかの利点があります。私が過去に利用したのは、gtk.Builder ファイルのプロパティ設定です。たとえば、UI ファイルでは、

<object class="GtkImage" id="image">
  <property name="stock">gtk-missing-image</property>
</object>

stockBuilder クラスによって構築されたときに Image オブジェクトのプロパティを設定します。カスタム ウィジェットで GObject プロパティを使用する場合は、これも利用できます。この動作は、Glade でのプロパティ バインディング サポートの出現により、さらに便利になります。

もう 1 つの潜在的な利点は、GObject プロパティの最小/最大制限と、整数と浮動小数点数のデフォルト値です。これは、UI 関連のプロパティに役立つ場合があります。

于 2011-05-30T05:24:00.813 に答える
1

それ以外に、Python の @property デコレータの代わりに GObject プロパティを使用する正当な理由はありますか?

あまり。それらのボイラープレートがたくさんあるので、notifyシグナルが必要でない限り、必要なものは何でも Python で書きます。

そうは言っても、「このプロパティの通知は必要ない」と考えてから、「実際、このプロパティはまったく必要ない」と気付くことはかなり一般的です。

于 2011-05-24T05:52:06.553 に答える