Label-Value (was: Re: Inheriting the @ sign from Ruby)

Fredrik Lundh fredrik at effbot.org
Tue Dec 12 14:49:21 EST 2000


Daniel Wood wrote:
> Here is what I wanted to do.  I have some random parameters, lambda
> and beta.  My calculation uses them like so:
>
> plot( lambda, beta )

lambda is a reserved word, so I doubt that's what you're
doing.  Let's call it "spam" instead.

> I'm using pygtk as a widget set.  I have some sliders.  I wanted to
> make one of the sliders control lambda and one control beta.  The
> control should be scaled by some parameter etc, etc.  Now I could have
> a function
>
> def lambdaCB( val ):
>  global lambda
>  lambda = val / constant
>
> but instead I thought that I would have a simple class
>
> class ScaleCB:
>   def __init__( self, variable, scale ):
>     self.variable = variable
>     self.scale = scale
>
>   def __call__( self, val )
>     self.variable = val / self.scale
>
> (then, I can do lots of parameters with nice simple code instead of
> bunches of stupid helper functions.
>
> This obviously didn't work.

(didn't do what you wanted it to do, at least)

How about this one:

    class PlotParams:
        def __init__(self):
            self.spam = 1
            self.beta = 2
        def setspam(self, value):
            self.spam = value
            self.redraw()
        def setbeta(self, value):
            self.beta = value
            self.redraw()
        def redraw(self):
            plot(self.spam, self.beta)

    myplot = PlotParams()

    spamScaleWidget.setcallback(myplot.setspam)
    betaScaleWidget.setcallback(myplot.setbeta)

> I *think* that the "pythonic" sol'n appears to be lambda = [ value ]
> or some such.

Besides being a syntax error, it doesn't look very Pythonic
to me.  If you want to change a named value, the best way
is to make it an attribute of a class.

</F>





More information about the Python-list mailing list