PDA

View Full Version : method of a class instance not accepted as Callback


Gilliard
08-10-2005, 05:55 AM
Is it impossible to use a method of an instance as callback ?
(As it can be done in Tkinter e.g. in x = Button(self, text="quit", command=self.quit)

My piece of code : (without indentation ! ??, why)

class VizServer:

def __init__(self):
self.clientName = None
self.clientMailbox = None

def networkCallback(self, message):
print "Message content : ", message[2:]

def connect(self, theClientName):
self.clientName = theClientName
try:
self.clientMailbox = viz.add(viz.NETWORK, self.clientName)
except:
print __name__, ": EXCEPTION : Connection failed"
viz.callback(viz.NETWORK_EVENT, self.networkCallback) # --> ERROR : "** Error: Invalid callback type"

# End of class !

If I put my "networkCallback(message) outside the class, it works ... but I don't have access to the instance attributes and methods anymore !

farshizzo
08-10-2005, 05:49 PM
Hi,

This issue has been resolved since version 2.52a. I believe the latest version will be released sometime next week. When you do have the latest version you can do the following:class VizServer(viz.EventClass):
def __init__(self):
viz.EventClass.__init__(self)
self.clientName = None
self.clientMailbox = None

def networkCallback(self, message):
print "Message content : ", message[2:]

def connect(self, theClientName):
self.clientName = theClientName
self.clientMailbox = viz.add(viz.NETWORK, self.clientName)
if not self.clientMailbox.valid():
print __name__, ": EXCEPTION : Connection failed"
self.callback(viz.NETWORK_EVENT, self.networkCallback)
Note that I changed your class to inherit from viz.EventClass.

Also, when posting snippets of code, you can use the following tag: [code ] insert code [/code ]