[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Wrap Tk widget using a class

Kevin Walzer

1/10/2008 10:06:00 PM

I'm trying to wrap a subset of a Tcl/Tk widget set called tclmacbag (see
http://tclmacbag.a...) 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::pnb', self)


def add(self, child):
self.master.call('::tclmacbag::pnb', '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.codeb...
1 Answer

Fredrik Lundh

1/10/2008 10:19:00 PM

0

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>