[wxPython-users] widget suggestion / question

Mark Erbaugh mark at microenh.com
Sun Dec 2 18:17:39 PST 2007


On Sun, 2007-12-02 at 20:42 -0500, Stuart McGraw wrote:
> Mark Erbaugh wrote:
> > Steve,
> > 
> > Thanks for the reply.
> > 
> > On Sun, 2007-12-02 at 10:08 -0800, Stephen Hansen wrote: 
> >>         In Borland Delphi, the individual widgets (components) had a
> >>         spare field
> >>         that could be used to store an integer for whatever purpose
> >>         the 
> >>         developer wanted.  I would like to see something like this in
> >>         wx. Here's
> >>         where I could use something like this. I designed a form with
> >>         a series
> >>         of buttons. Several of the buttons could share the same event
> >>         handler if 
> >>         the event handler could figure out which button invoked it.  I
> >>         supposed
> >>         I could use reflection to figure out which button, but it
> >>         would be nice
> >>         if the event handler could check this spare field in the
> >>         button. 
> >>
> >>
> >> Since every button has it's own ID, isn't .GetID() enough to find
> >> which is which? 
> > 
> > That certainly is an approach. But, would that mean that I would have to
> > assign a known ID to the button rather than using -1?  One problem I see
> > with this is that I would have to modify my handler if I modified the
> > GUI. Perhaps I added a new button that I wanted to be handled
> > identically to an existing button.  That button would have to have a
> > different ID so I would have to modify the handler to look for the new
> > ID.
> > 
> >>
> >>         I'm using wxGlade for the design. The latest version allows
> >>         you to
> >>         attach properties to the widgets which it implements by
> >>         calling a SetXXX
> >>         method. To get this to work, I had to derive a button from
> >>         wxButton that 
> >>         had a SetXXX method. 
> >>
> >> As I find it more efficient to do all my GUI design by hand, I don't
> >> know what wxGlade's capabilities are. Does it let you enter arbitrary
> >> code? As all the wxPython objects are regular python objects, you can
> >> set any arbitrary attribute on them if you want. I personally find
> >> that "poor practice", but that's me.
> > 
> > Sometimes I do my own hand-coding and I have set arbitrary attributes.
> > Like you, I somehow feel that this is not right, but it's perfectly good
> > Python. That's why I'd kind of like an 'official' wxPython attribute.
> > Since Python is dynamically typed this attribute could hold whatever tne
> > programmer needed.
> > 
> >>
> >> You could do 'button.whichButton = 5' if you wanted. Even though
> >> 'whichButton' doesn't exist before. 
> > 
> > The new version of wxGlade does support arbitrary code. I haven't tried
> > that feature, but it might work for what I need. Thanks for the
> > suggestion.
> 
> Not sure if this is useful with Glade or not but if you don't like
> setting attributes on objects you don't own, what I have done in the
> past is use lambda or functools.partial to bind an extra argument
> to the handler call.  I use strings below but obviously one could
> substitute int's or arbitrary objects.
> [Warning, untested code from biological memory!]
> 
>      ...in frame ...
>          button1.Bind (wx.EVT_BUTTON, lambda x: self.button_hndlr ("button 1", x))
>          button2.Bind (wx.EVT_BUTTON, lambda x: self.button_hndlr ("button 2", x))
>      ...
>      def button_hndlr (self, button_data, evt=None):
> 	if button_data == "button 1":
> 	    ...
>          elif button_data == "button 2":
> 	    ...
> 
> I'm ok with lambda but there are those who aren't, in which case
> functools.partial can be used for simpler syntax at the cost of
> an import:
> 
>    from functools import partial
>       ...
>          button1.Bind (wx.EVT_BUTTON, partial(self.button_hndlr, "button 1"))

I've used (and maybe over-used lambda), so I'm comfortable with it.  I
don't think wxGlade supports it in its automatic code generation.

Mark





More information about the wxpython-users mailing list