2011-05-11 79 views
2

當從PyGTK的GObject的類派生,你可以在C定義的GObject特性等,使用__gproperties__字典,和do_get_property/do_set_property方法,如在Sub-classing GObject in Python說明。請注意,這是在我們在Python中使用@property裝飾器之前編寫的。PyGTK的屬性與屬性蟒

GObject屬性的優點是,只要屬性發生變化,就可以連接到對象的notify::property-name信號以接收通知。除此之外,是否有充分的理由使用GObject屬性而不是Python的@property裝飾器?

回答

1

爲什麼不使用它們?使用 Python綁定提供的simplified version,定義GObject屬性與定義Python屬性的 沒有區別。

話雖如此,除了 通知之外,還有幾個優點。我過去使用的是在gtk.Builder文件中設置的屬性 。例如,在UI文件,

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

設置當由所述 生成器類結構的圖象對象上的stock屬性;如果您在自定義小部件中使用 中的GObject屬性,則可以利用此功能。這種行爲甚至會在property binding support in Glade出現時更爲有用 。

另一個潛在的優點是GObject屬性的最小/最大限制和整數和浮點數的缺省值,有時這對 與UI相關的屬性有用。

+0

我不知道簡化版!感謝您指出了這一點。 – ptomato 2011-06-07 21:42:42

1

除此之外,是否有任何理由使用GObject屬性而不是Python的@property裝飾器?

不是。他們有很多樣板,所以除非我需要notify信號,否則我會用Python編寫任何我需要的東西。

話雖如此,我會認爲「我不需要通知這個屬性」然後意識到「實際上,我根本不需要這個屬性」。