pygtk: 我的自定义控件应该继承哪个类?
在使用pygtk制作自定义小部件时,我应该从哪个类继承呢?我希望能够把这个小部件放到其他小部件里面,但我又不想让别人往我的小部件里放东西。通常我会让我的小部件继承自gtk.HBox
或gtk.VBox
,这样是可以的,但这样别人就可以对我的小部件使用pack_start()
,这可能会导致一些奇怪的事情发生。我想从gtk.Widget
继承,但那样的话我该怎么往里面添加东西呢?我也想从gtk.Container
或gtk.Bin
继承,但文档上说它们是抽象类。
1 个回答
0
如果你的自定义小部件里面包含其他(可能是标准的)小部件,你可以在重写的 pack_
方法里直接抛出一个异常。这样一来,别人就不容易往里面放东西了。在你的类里面,你需要用 super(...).pack_xxx
来代替 self.pack_xxx
。
不过,可能更好的做法是从 gtk.Container
这个类继承。这样的话,你就需要实现它的一些抽象方法,比如 do_add(self, widget)
。
如果你只是绘制自定义的内容(没有子部件),那么就不需要从容器小部件继承。你可以查看 pygtk.org上的教程。