[Tutor] If not global, how?

alan.gauld@bt.com alan.gauld@bt.com
Tue Apr 1 07:46:01 2003


> class EntryClass(Pmw.EntryField):
> 	def __init__(self, parent=0):
> 
> 	def SendCommand(command):
> 		for command in ('\x09','\x06'):
>                 ....
> 			old=outputbox.getvalue()
>                 ....
> 
> 	def Callback(self):
> 		value=self.getvalue()
> 		if value: SendCommand(value)

First of all you show sendCommand as part of the class (by the
indentation) but it doesn't have a self parameter. It does have 
a command parameter so python will think that 'command' is the 
self value(self is just a naming convention, you can call the 
first paramerter in a method anything you like!). I don't think 
that's what you want, rather you want to put sendCommand function 
outside the class.

Second within sendCommand you refer to outputbox - where is this 
defined? Its not part of the Entry class not in sendCommand itself?
I suspect you want to pass outputbox into sendCommamd as an argument.

If you move sendCommand out of the class and add the outputbox as a 
parameter then your Callback should work fine since it will see 
sendCommand as a global function - although you need to find a way 
for sendCommand to locate the right outputbox!.

Without really knowing what your GUI design is like its kind of 
hard to know the solution. I'm inclined to go back to first 
principles and ask what the responsibility of your Entryclass is? 
Normally an Entry Class stores and retrieves text. Thats it. 
End of story. Now you are subclassing the Entry to add what 
capability? What will be different about your EntryClass from 
the standard one?

If you are trying to link the entryClass to sending (or receiving)
data along a port then maybe its a PortEntry class and it should 
have a reference to the port in the class. But if thats the case 
then it seems likely the outputbox needs to be involved somewhere 
too? 

So, is the EntryClass tied to a single specific outputbox? If so 
add a reference to it in your class and pass it in as an argument 
to init(). You can then pass it out to sendCommand() from your 
callback. If OTOH there are multiple output boxes and ports then 
it gets much more complicated and I think we need to step back 
and look at the bigger picture of whats required.

Alan g.
Author of the Learn to Program website
http://www.freenetpages.co.uk/hp/alan.gauld/