Peter Milliken wrote:

Well, here are some clues - the "multiple" inheritance doesn't seem to work the way the manual *implies* it should i.e. multiple inheritance is described as searching for methods in the first inheritance and then all it's ancestors, then onto the next and all its ancestors and so on.

Tkinter widget instances are proxy objects that delegate method calls to an underlying Tk widget. A widget instance can only be bound to a single Tk widget.

Multiple inheritance works as usual at the Tkinter class level, but that doesn't help if the widget instance is not bound to the right Tk object when you do a method call.

To get an "insert" (Listbox) method on your class you need to invoke the __init__ method on the super classes (sub-classes should always invoke the initialisation of their super class anyway - so that is something your class definition is definitely missing!) i.e.

   Listbox.__init__(self)

That binds the widget to the underlying Tk listbox widget (see the code in Tkinter's BaseWidget for details). After this call, any method calls will be forwarded to the Tk listbox.

>    Listbox.__init__(self)
>    Scrollbar.__init__(self)
>
> And viola! ScrolledList now has the methods of Scrollbar - and "lost" > the methods of Listbox.

After those calls, the widget instance ends up being bound to a Tk scrollbar widget. There's no change in what methods the object has at the Python level, though.

</F>

_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
http://mail.python.org/mailman/listinfo/tkinter-discuss

Reply via email to