2

从 PyGTK 中的 GObject 类派生时,您可以像在 C 中一样使用__gproperties__dict 和do_get_property/do_set_property方法定义 GObject 属性,如在 Python 中对 GObject 进行子类化中所述。请注意,这是在我们@property使用 Python 中的装饰器之前编写的。

GObject 属性的优点是您可以连接到对象的notify::property-name信号,以便在属性更改时接收通知。除此之外,是否有充分的理由使用 GObject 属性而不是 Python 的@property装饰器?

4

2 回答 2

1

除此之外,是否有充分的理由使用 GObject 属性而不是 Python 的 @property 装饰器?

并不真地。它们有很多样板文件,所以除非我需要notify信号,否则我会用 Python 编写我需要的任何东西。

话虽如此,我通常会认为“我不需要此属性的通知”,然后意识到“实际上,我根本不需要此属性”。

于 2011-05-24T05:52:06.553 回答
1

为什么不使用它们?使用 Python 绑定提供的简化版本,定义 GObject 属性与定义 Python 属性没有什么不同。

话虽如此,除了通知之外,还有几个优点。我过去使用的一个是 gtk.Builder 文件中的属性设置。例如,在您的 UI 文件中,

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

由 Builder 类构造时设置stockImage 对象的属性;如果您在自定义小部件中使用 GObject 属性,您也可以利用这一点。随着Glade 中属性绑定支持的出现,这种行为将更加有用。

另一个潜在优势是 GObject 属性的最小/最大限制以及整数和浮点数的默认值,这有时对与 UI 相关的属性很有用。

于 2011-05-30T05:24:00.813 回答