在pygtk中制作自定义小部件时,它应该从哪个类继承?我希望能够将小部件放在其他小部件中,但我不希望其他人将内容放入我的小部件中。通常我会将我的小部件继承自gtk.HBox
或gtk.VBox
,这样可以正常工作,但是有人可以在我的小部件上执行pack_start()
并导致奇怪的事情发生。我会继承gtk.Widget
但是我该如何添加内容呢?我会继承gtk.Container
或gtk.Bin
,但文档说它们是抽象类。
答案 0 :(得分:0)
如果您的自定义窗口小部件包含其他(可能是标准的)窗口小部件,则只能在重写的pack_
方法中引发异常。这样,没人能把东西放进去(很容易)。在课堂内,您必须使用super(...).pack_xxx
代替self.pack_xxx
。
但是从gtk.Container
派生出来可能更好。然后你必须实现像do_add(self, widget)
这样的抽象方法。
如果您只绘制自定义内容(无子项),则无需从容器窗口小部件派生。请参阅tutorial on pygtk.org。