pygtk: 我的自定义控件应该继承哪个类?

1 投票
1 回答
1091 浏览
提问于 2025-04-16 04:49

在使用pygtk制作自定义小部件时,我应该从哪个类继承呢?我希望能够把这个小部件放到其他小部件里面,但我又不想让别人往我的小部件里放东西。通常我会让我的小部件继承自gtk.HBoxgtk.VBox,这样是可以的,但这样别人就可以对我的小部件使用pack_start(),这可能会导致一些奇怪的事情发生。我想从gtk.Widget继承,但那样的话我该怎么往里面添加东西呢?我也想从gtk.Containergtk.Bin继承,但文档上说它们是抽象类。

1 个回答

0

如果你的自定义小部件里面包含其他(可能是标准的)小部件,你可以在重写的 pack_ 方法里直接抛出一个异常。这样一来,别人就不容易往里面放东西了。在你的类里面,你需要用 super(...).pack_xxx 来代替 self.pack_xxx

不过,可能更好的做法是从 gtk.Container 这个类继承。这样的话,你就需要实现它的一些抽象方法,比如 do_add(self, widget)

如果你只是绘制自定义的内容(没有子部件),那么就不需要从容器小部件继承。你可以查看 pygtk.org上的教程

撰写回答