Wrap Tk widget using a class - Python

This is a discussion on Wrap Tk widget using a class - Python ; I'm trying to wrap a subset of a Tcl/Tk widget set called tclmacbag (see http://tclmacbag.autons.net/ ) for use in my Tkinter application, using a "macnotebook" class. I'm having some difficulty getting things configured correctly. Here is my class code: from ...

+ Reply to Thread
Results 1 to 2 of 2

Wrap Tk widget using a class

  1. Default Wrap Tk widget using a class

    I'm trying to wrap a subset of a Tcl/Tk widget set called tclmacbag (see
    http://tclmacbag.autons.net/) for use in my Tkinter application, using a
    "macnotebook" class. I'm having some difficulty getting things
    configured correctly.

    Here is my class code:

    from Tkinter import *

    class Macnotebook:

    def __init__(self, master):

    self.master = master
    self.master.call('package', 'require', 'tclmacbag')


    def notebook(self):

    self.master.call('::tclmacbag:nb', self)


    def add(self, child):
    self.master.call('::tclmacbag:nb', 'add', child)

    Here is an example of how I'm calling this in my code:

    from Macnotebook import Macnotebook

    self.prefbook = Macnotebook.notebook(self.prefframe)
    self.prefbook.pack(fill=BOTH, expand=YES, side=TOP)

    This returns the following error in my console:

    Traceback (most recent call last):

    self.prefbook = Macnotebook.notebook(self.prefframe)
    TypeError: unbound method notebook() must be called with Macnotebook
    instance as first argument (got Frame instance instead)

    Can anyone suggest how I might better structure the class so that this
    works? I'm a bit of a newbie with OO, so any pointers are appreciated.

    --
    Kevin Walzer
    Code by Kevin
    http://www.codebykevin.com

  2. Default Re: Wrap Tk widget using a class

    Kevin Walzer wrote:


    > Here is an example of how I'm calling this in my code:
    >
    > from Macnotebook import Macnotebook
    >
    > self.prefbook = Macnotebook.notebook(self.prefframe)
    > self.prefbook.pack(fill=BOTH, expand=YES, side=TOP)


    you're attempting to call the method in a class object. I suspect that
    you have to create an instance of that class first:

    self.prefbook = Macnotebook(self.prefframe)
    self.prefbook.notebook() # create it
    self.prefbook.pack(...)

    # call self.prefbook.add() to add pages to the notebook

    (it's probably a good idea to move the notebook creation code into the
    __init__ method; two-stage construction isn't very pythonic...)

    </F>


+ Reply to Thread