作者dokinkon (doki)
看板Python
标题Re: [问题] pygtk继承问题 and __init(self)__
时间Wed Oct 28 10:54:17 2009
原谅我自问自答的灌水行为...
//----------------------------------------------------------
原来是当我写了
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
1F:推 KSJ:印象中是 加gtk.DrawingArea.__init__(self,.......) 10/28 13:25
2F:→ sbrhsieh:这是旧的作法。new style class 使用 super 来做 10/28 13:44
3F:→ sbrhsieh:cooperative super class 会比较好。 10/28 13:44
4F:→ sbrhsieh: call 10/28 13:45