看板 Python 關於我們 聯絡資訊
原諒我自問自答的灌水行為... //---------------------------------------------------------- 原來是當我寫了 class MyPanel(gtk.DrawingArea): def __init__(self): # do something gtk.DrawingArea的constructor (or __init__()?)並沒有被呼叫到... (我比較熟的是c++,所以python的繼承體系的instance機制很不熟...) 所以我改成這樣: class MyPanel(gtk.DrawingArea): def __init__(self): super(MyPanel, self).__init__() # do something 要明確指名呼叫super class的__init__()即可 我也不知道這樣的做法是不是正統的方式 還請各為先進不吝指教 ============================================== 我是python教的新教徒XD ※ 引述《dokinkon (doki)》之銘言: : 我是一個python新手,如果問了笨問題還請板上先進多包容 : 最近在學習PyGtk + PyCairo想提高開發GTK+的速度 : 由於某一個widget必須能後畫出一些特別圖案 : 因此我照著PyCairo的教學網頁上寫了一個class 繼承自 pygtk的 gtk.DrawingArea如下 : class MyPanel(gtk.DrawingArea): : 問題來了,當我在這個class加入__init__(self)這個函式時 : pygtk就會跟我抱怨: : GtkWarning: gtk_widget_show: assertion 'GTK_IS_WIDGET(widget)' failed : widget.show() : 但是沒有__init__時,一切又正常 : 想請教一下是我有什麼環節疏忽了嗎? : 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.128.139.157
KSJ:印象中是 加gtk.DrawingArea.__init__(self,.......) 10/28 13:25
sbrhsieh:這是舊的作法。new style class 使用 super 來做 10/28 13:44
sbrhsieh:cooperative super class 會比較好。 10/28 13:44
sbrhsieh: call 10/28 13:45
KSJ:附一下網頁:http://www.python.org/doc/newstyle/ 10/28 14:11