Events and binding - best way?

Hi all,

I'm currently trying to learn wxPython. Looking around, I see several
different ways to bind functions to widgets/events --- eg, calling
EVT_foo directly, calling .Bind() on the widget, creating an
EventManager.

Can anyone give me a brief rundown of the differences between these
approaches (and any others I have missed)? Which is the best? (where
"best" means "most pythonic", or possibly "the closest to where
wxPython is going in the future")

I appreciate any help,

···

--
John.

The EVT_foo() macros are more or less deprecated, though I doubt
there’s a warning attached to them so you would be well within reason
to expect them to work.

EventManager … is different. I haven’t really wrapped my head around
it. I know it uses to top-secret pub/sub technology distribed with
wxPython but I have no idea as to whether it is supported or not. The
examples I have seen have been very responsive. If you’re used to
something like it(1) then it might work best for you.

gadget.Bind() was introduced in V2.4 and is the ‘canon’ way to do
things in wx these days. It has a lot of advantages, such as
eliminating the need to have event IDs statically generated - Bind()
can discover the ID on its own, so you can use defaults for things like
buttons, etc. I’ve been using it since it was implemented and find it
to be far superior to the EVT_foo() stuff, especially where it comes to
code simplicity and readability (i.e. more maintainable code(2)).

You might try searching through the archives for any news on
EventManager, as well as the wiki which is linked from the wxPython
main site.

(1) I know publish/subscribe has been used elsewhere (such as - dear me

  • the good old Amiga platform, for thier primeval peer-to-peer
    networking protocol) and for all I know may be a commonly understood
    idiom in certain circles. I’m but a mere hacker, not a highfalutin’
    software engineer (g) so I only have heresay to contribute to this. :slight_smile:

(2) As months go by between working on a specific project, I’ve found
maintainability to be a premium feature, for we all know “any code that
you haven’t touched for a month - might as well have been written by a
stranger”. As I switch between projects, I find that using a consistent
framework and simple code idioms makes it relatively easy to pick up
where I left off, or fix obscure bugs, etc. Thus I like Bind() :slight_smile:

···

On 9/6/05, John Fouhy john@fouhy.net wrote:

Can anyone give me a brief rundown of the differences between these

approaches (and any others I have missed)? Which is the best? (where
“best” means “most pythonic”, or possibly “the closest to where
wxPython is going in the future”)


“Things fall apart. The Center cannot hold.”
-
Life as a QA geek, in a nutshell.

Best,

Jeff

Well I think it is a Linux problem.

My setup is
linux 2.6.11.4 (Suse 9.3)
python2.4
wxPython2.6-gtk2-ansi-2.6.1.0
wxPython-common-gtk2-ansi-2.6.1.0
gtk-1.2.10
gtk2-2.6.4-6
glib-1.2.10

I have the demo running but notice a few strange things - for example no
background colors show up in the notebook or listbook demos ie
setBackGroundColour() has no effect. Also styles do not show up eg In the
splitter window there seems to be only one sash style (the kde default, wx
style settings have no effect).

Seems like I have messed up the installation / configuration - I used the
redhat rpms from the download site - is this the problem. ?

Can anybody advise - thanks

Bernard

The EVT_foo() macros are more or less deprecated, though I doubt there's a
warning attached to them so you would be well within reason to expect them
to work.

Does that apply for menus too? All the documentation I've seen talking
about creating menus uses wx.EVT_MENU.
(eg: http://wiki.wxpython.org/index.cgi/WorkingWithMenus or
http://wiki.wxpython.org/index.cgi/Getting_20Started#head-d05b90666d1fd97b7058b6bf323c7596a68dd2a5
)

EventManager ... is different. I haven't really wrapped my head around it.
I know it uses to top-secret pub/sub technology distribed with wxPython but
I have no idea as to whether it is supported or not. The examples I have
seen have been very responsive. If you're used to something like it(1) then
it might work best for you.

There is an EventManager demo in the current wxPython demo.py (which
is how I found out about it). It looks quite simple --- I don't see
any publish/subscribe stuff (so maybe that's all happening under the
hood). It seems to be basically like .Bind() (where foo.Bind(evt,
handler) maps to eventManager.Register(handler, evt, foo) except that
you can send a single event to multiple handlers if you wish.

...hmm. That's kinda tempting.
  

gadget.Bind() was introduced in V2.4 and is the 'canon' way to do things in
wx these days. It has a lot of advantages, such as eliminating the need to
have event IDs statically generated - Bind() can discover the ID on its own,
so you can use defaults for things like buttons, etc. I've been using it
since it was implemented and find it to be far superior to the EVT_foo()
stuff, especially where it comes to code simplicity and readability (i.e.
more maintainable code(2)).

Are there any docs on .Bind that you can point me to? I haven't had
much luck finding things. The docstring seems straightforward, but
there's a few things I'm not sure I understand.

eg, this is from the wxPython demo:

        b = MyButton(self, -1, " Click me ", (30,30))
        self.Bind(wx.EVT_BUTTON, self.OnClick, id=b.GetId())

Why would you not just write b.Bind(wx.EVT_BUTTON, self.OnClick) ?

···

On 06/09/05, Jeff Grimmett <grimmtooth@gmail.com> wrote:

--
John.

John Fouhy wrote:

···

On 06/09/05, Jeff Grimmett <grimmtooth@gmail.com> wrote:

The EVT_foo() macros are more or less deprecated, though I doubt there's a
warning attached to them so you would be well within reason to expect them
to work.
   
Does that apply for menus too? All the documentation I've seen talking
about creating menus uses wx.EVT_MENU.
(eg: http://wiki.wxpython.org/index.cgi/WorkingWithMenus or
http://wiki.wxpython.org/index.cgi/Getting_20Started#head-d05b90666d1fd97b7058b6bf323c7596a68dd2a5
)

EventManager ... is different. I haven't really wrapped my head around it.
I know it uses to top-secret pub/sub technology distribed with wxPython but
I have no idea as to whether it is supported or not. The examples I have
seen have been very responsive. If you're used to something like it(1) then
it might work best for you.
   
There is an EventManager demo in the current wxPython demo.py (which
is how I found out about it). It looks quite simple --- I don't see
any publish/subscribe stuff (so maybe that's all happening under the
hood). It seems to be basically like .Bind() (where foo.Bind(evt,
handler) maps to eventManager.Register(handler, evt, foo) except that
you can send a single event to multiple handlers if you wish.

...hmm. That's kinda tempting.

gadget.Bind() was introduced in V2.4 and is the 'canon' way to do things in
wx these days. It has a lot of advantages, such as eliminating the need to
have event IDs statically generated - Bind() can discover the ID on its own,
so you can use defaults for things like buttons, etc. I've been using it
since it was implemented and find it to be far superior to the EVT_foo()
stuff, especially where it comes to code simplicity and readability (i.e.
more maintainable code(2)).
   
Are there any docs on .Bind that you can point me to? I haven't had
much luck finding things. The docstring seems straightforward, but
there's a few things I'm not sure I understand.

eg, this is from the wxPython demo:

       b = MyButton(self, -1, " Click me ", (30,30))
       self.Bind(wx.EVT_BUTTON, self.OnClick, id=b.GetId())

Why would you not just write b.Bind(wx.EVT_BUTTON, self.OnClick) ?

I am intrested in how you can create a menu when using the event manager. the wx.menu objects don't seem to allow the us of anything BUT ID's

Timothy Smith wrote:

John Fouhy wrote:

Does that apply for menus too? All the documentation I've seen talking
about creating menus uses wx.EVT_MENU.

menus are not real wx.windows, so they are different, and don't have a bind() method.

eg, this is from the wxPython demo:

       b = MyButton(self, -1, " Click me ", (30,30))
       self.Bind(wx.EVT_BUTTON, self.OnClick, id=b.GetId())

Why would you not just write b.Bind(wx.EVT_BUTTON, self.OnClick) ?

No reason, b.Bind(wx.EVT_BUTTON, self.OnClick) is the best way to do it. Unfortunately, the demo and all the docs, Wiki, etc, are evolving documents, and no one has the time to go through and make sure everything gets updated to the latest and greatest syntax when changes are made.

I am intrested in how you can create a menu when using the event manager. the wx.menu objects don't seem to allow the us of anything BUT ID's

I don't know about the Event Manager, but it does make sense that menus wouldn't work with them, as they are not real windows. However, at least you can do:

         item = wx.MenuItem(FileMenu, wx.ID_ANY, "&Quit")
         FileMenu.AppendItem(item)
         self.Bind(wx.EVT_MENU, self.OnQuit, item)

So you don't need explicit IDs. I NEVER use explicit IDs. In this case self is a wx.Frame.

For that matter that above button example can also be done as:

self.Bind(wx.EVT_BUTTON, self.OnClick, b)

You can pass in either the Window itself ,or the ID of the Window that is creating the event.

-CHB

···

--
Christopher Barker, Ph.D.
Oceanographer
                                         
NOAA/OR&R/HAZMAT (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception

Chris.Barker@noaa.gov

I don't know about the Event Manager, but it does make sense that menus wouldn't work with them, as they are not real windows. However, at least you can do:

        item = wx.MenuItem(FileMenu, wx.ID_ANY, "&Quit")
        FileMenu.AppendItem(item)
        self.Bind(wx.EVT_MENU, self.OnQuit, item)

i'm doing this to migrate from 2.4 to 2.6 btw (since EVT macros will come with a warning soon i imagine) and i'm finding if i try your example i get this
self.Bind(self.ReportForm,wx.EVT_MENU,Daily)
AttributeError: MainFrame instance has no attribute 'Bind

now i also tried it like this with the event manager

Daily = wx.MenuItem(ReportMenu,wx.ID_ANY,"Daily")
ReportMenu.AppendItem(Daily)
event.eventManager.Register(self.ReportForm,wx.EVT_MENU,Daily)

and it work without any errors, BUT the menu item doesn't show up at all!

Timothy Smith wrote:

I don't know about the Event Manager, but it does make sense that menus wouldn't work with them, as they are not real windows. However, at least you can do:

        item = wx.MenuItem(FileMenu, wx.ID_ANY, "&Quit")
        FileMenu.AppendItem(item)
        self.Bind(wx.EVT_MENU, self.OnQuit, item)

i'm doing this to migrate from 2.4 to 2.6 btw (since EVT macros will come with a warning soon i imagine) and i'm finding if i try your example i get this
self.Bind(self.ReportForm,wx.EVT_MENU,Daily)
AttributeError: MainFrame instance has no attribute 'Bind

now i also tried it like this with the event manager

Daily = wx.MenuItem(ReportMenu,wx.ID_ANY,"Daily")
ReportMenu.AppendItem(Daily)
event.eventManager.Register(self.ReportForm,wx.EVT_MENU,Daily)

and it work without any errors, BUT the menu item doesn't show up at all!

ok fixed it. i now use

Daily = wx.MenuItem(ReportMenu,wx.NewId(),"&Daily")
ReportMenu.AppendItem(Daily)
event.eventManager.Register(self.ReportForm,wx.EVT_MENU,Daily)

however nothing happens when i click on the menuitem, any idea why?

Timothy Smith wrote:

i'm doing this to migrate from 2.4 to 2.6 btw (since EVT macros will come with a warning soon i imagine) and i'm finding if i try your example i get this
self.Bind(self.ReportForm,wx.EVT_MENU,Daily)
AttributeError: MainFrame instance has no attribute 'Bind

Try this:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

>>> help(wx.Window.Bind)
Help on method Bind in module wx._core:

Bind(self, event, handler, source=None, id=-1, id2=-1) unbound wx._core.Window m
ethod
     Bind an event to an event handler.

     :param event: One of the EVT_* objects that specifies the
                   type of event to bind,

     :param handler: A callable object to be invoked when the
                   event is delivered to self. Pass None to
                   disconnect an event handler.

     :param source: Sometimes the event originates from a
                   different window than self, but you still
                   want to catch it in self. (For example, a
                   button event delivered to a frame.) By
                   passing the source of the event, the event
                   handling system is able to differentiate
                   between the same event type from different
                   controls.

     :param id: Used to spcify the event source by ID instead
                of instance.

     :param id2: Used when it is desirable to bind a handler
                   to a range of IDs, such as with EVT_MENU_RANGE.

/jan

···

--
----------------------------------------------------------------------
Jan Finell email : jfinell@regionline.fi
Sipintie 27 A finell@cenix-bioscience.com
67700 Kokkola icq : 91719211
FINLAND msn : winelli@hotmail.com
                                   jabber : winelli@jabber.org
                                    phone : +358(0)41 5494185
                                      web : http://pp.kpnet.fi/finell

Public key at http://www.cenix-bioscience.com/public_keys/finell.gpg
GnuPG fingerprint: BF5F B0A7 DFFC AFAC 7E9A 6B60 4BD1 F421 090B 70A5
----------------------------------------------------------------------

Jan Finell wrote:

Timothy Smith wrote:

i'm doing this to migrate from 2.4 to 2.6 btw (since EVT macros will come with a warning soon i imagine) and i'm finding if i try your example i get this
self.Bind(self.ReportForm,wx.EVT_MENU,Daily)
AttributeError: MainFrame instance has no attribute 'Bind

Try this:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

the syntax isn't my problem.

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)
AttributeError: MainFrame instance has no attribute 'Bind'

Bind doesn't exist, self is a wx.Frame

Timothy Smith wrote:

self.Bind(self.ReportForm,wx.EVT_MENU,Daily)
AttributeError: MainFrame instance has no attribute 'Bind

Try this:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

the syntax isn't my problem.

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)
AttributeError: MainFrame instance has no attribute 'Bind'

Bind doesn't exist, self is a wx.Frame

I agree that the error does seem to point to something else, but what is self.ReportForm ? and you've final version is also in error:

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)

it shouldn't be self.wx.EVT_MENU:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

If self,.Report form is your callback, and Daily is a menu item.

It's always worked for me. If it really doesn't, make a very minimal, complete application that doesn't work, and we'll try to fix it.

-Chris

Chris Barker wrote:

Timothy Smith wrote:

self.Bind(self.ReportForm,wx.EVT_MENU,Daily)
AttributeError: MainFrame instance has no attribute 'Bind

Try this:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

the syntax isn't my problem.

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)
AttributeError: MainFrame instance has no attribute 'Bind'

Bind doesn't exist, self is a wx.Frame

I agree that the error does seem to point to something else, but what is self.ReportForm ? and you've final version is also in error:

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)

it shouldn't be self.wx.EVT_MENU:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

If self,.Report form is your callback, and Daily is a menu item.

It's always worked for me. If it really doesn't, make a very minimal, complete application that doesn't work, and we'll try to fix it.

-Chris

maybe it's because i'm still on 2.4?

Timothy Smith wrote:

Chris Barker wrote:

Timothy Smith wrote:

self.Bind(self.ReportForm,wx.EVT_MENU,Daily)
AttributeError: MainFrame instance has no attribute 'Bind

Try this:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

the syntax isn't my problem.

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)
AttributeError: MainFrame instance has no attribute 'Bind'

Bind doesn't exist, self is a wx.Frame

I agree that the error does seem to point to something else, but what is self.ReportForm ? and you've final version is also in error:

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)

it shouldn't be self.wx.EVT_MENU:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

If self,.Report form is your callback, and Daily is a menu item.

It's always worked for me. If it really doesn't, make a very minimal, complete application that doesn't work, and we'll try to fix it.

-Chris

here is a small demo program that demonstrates me Bind() AND the static box problem. note that the 2nd level staticbox's heading text does not show and neither does it's border. on 2.4 it shows up just fine, but under 2.6.1 it doesn't at all. i'm in the process of moving to 2.6, but i need to solve that problem first.

demo.py (1.29 KB)

StaticBoxes don't appear to like being nested on Windows. On Linux, it appeared to work fine. Probably a windows specific bug. Nested static boxes are not terribly attractive IMO, which may explain how this bug escaped earlier detection.

Log a windows specific bug on wxWidgets.org

The parent of your TextCtrls *should be* LoginPanel, not the form it(self). Although this did not seem to have an effect.

self.wx.EVT_MENU does not exist in your sample code, which kinda makes sense...

    self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

wx.EVT_MENU works with a method definition at the form level.

  def ReportForm(self, event):
    print event

-Joe

Timothy Smith wrote:

···

Timothy Smith wrote:

Chris Barker wrote:

Timothy Smith wrote:

self.Bind(self.ReportForm,wx.EVT_MENU,Daily)
AttributeError: MainFrame instance has no attribute 'Bind

Try this:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

the syntax isn't my problem.

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)
AttributeError: MainFrame instance has no attribute 'Bind'

Bind doesn't exist, self is a wx.Frame

I agree that the error does seem to point to something else, but what is self.ReportForm ? and you've final version is also in error:

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)

it shouldn't be self.wx.EVT_MENU:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

If self,.Report form is your callback, and Daily is a menu item.

It's always worked for me. If it really doesn't, make a very minimal, complete application that doesn't work, and we'll try to fix it.

-Chris

here is a small demo program that demonstrates me Bind() AND the static box problem. note that the 2nd level staticbox's heading text does not show and neither does it's border. on 2.4 it shows up just fine, but under 2.6.1 it doesn't at all. i'm in the process of moving to 2.6, but i need to solve that problem first.

------------------------------------------------------------------------

import wx

class MainFrame(wx.Frame):
  def __init__(self, parent, id, title):
    wx.Frame.__init__(self, parent, id, title, size = (800,600))
    
    LoginPanel = wx.Panel(self, -1)

    #~ #Make menu items
    ReportMenu = wx.Menu()
    
    Daily = wx.MenuItem(ReportMenu,wx.NewId(),"&Daily")
    ReportMenu.AppendItem(Daily)
    
    Menu = wx.MenuBar()
    Menu.Append(ReportMenu,'Reports')
    #Set the menu bar
    self.SetMenuBar(Menu)
    
    print dir(self)
    #self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)

    #setup panel sizer
    StaticBox2 = wx.StaticBox(LoginPanel,-1,"sub box")
    StaticBoxSizer2 = wx.StaticBoxSizer(StaticBox2,wx.VERTICAL)
    StaticBoxSizer2.Add(wx.TextCtrl(self,-1,"SECOND LAYER STATIC BOX SIZER"))
    
    StaticBox = wx.StaticBox(LoginPanel,-1,"Login")
    StaticBoxSizer = wx.StaticBoxSizer(StaticBox,wx.VERTICAL)
    StaticBoxSizer.Add(wx.TextCtrl(self,-1,"FIRST LAYER STATIC BOX SIZER"))
    StaticBoxSizer.Add(StaticBoxSizer2)

    LoginPanel.SetSizer(StaticBoxSizer)
    self.SendSizeEvent()
    LoginPanel.Fit()
    
class App(wx.App):
  """This class is the application handle for wxPython"""
  def OnInit(self):
    frame = MainFrame(None, -1, 'exmaple')
    frame.Show(True)
    return True
    
def Main():
  """Main function, the last thing to run, runs the wxPython application in a loop"""
  App().MainLoop()

Main()

------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: wxPython-users-unsubscribe@lists.wxwidgets.org
For additional commands, e-mail: wxPython-users-help@lists.wxwidgets.org

Joe Brown wrote:

StaticBoxes don't appear to like being nested on Windows. On Linux, it appeared to work fine. Probably a windows specific bug. Nested static boxes are not terribly attractive IMO, which may explain how this bug escaped earlier detection.

nested boxes are perfect for my application. i muse them to group together elements on the form and give them a meaningful name.

Log a windows specific bug on wxWidgets.org

The parent of your TextCtrls *should be* LoginPanel, not the form it(self). Although this did not seem to have an effect.

self.wx.EVT_MENU does not exist in your sample code, which kinda makes sense...

        self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

wx.EVT_MENU works with a method definition at the form level.

    def ReportForm(self, event):
        print event

no Bind doesn't work at all for me. it's not a method of wx.Frame in 2.4 obviously.

···

-Joe

Timothy Smith wrote:

Timothy Smith wrote:

Chris Barker wrote:

Timothy Smith wrote:

self.Bind(self.ReportForm,wx.EVT_MENU,Daily)
AttributeError: MainFrame instance has no attribute 'Bind

Try this:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

the syntax isn't my problem.

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)
AttributeError: MainFrame instance has no attribute 'Bind'

Bind doesn't exist, self is a wx.Frame

I agree that the error does seem to point to something else, but what is self.ReportForm ? and you've final version is also in error:

self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)

it shouldn't be self.wx.EVT_MENU:

self.Bind(wx.EVT_MENU, self.ReportForm, Daily)

If self,.Report form is your callback, and Daily is a menu item.

It's always worked for me. If it really doesn't, make a very minimal, complete application that doesn't work, and we'll try to fix it.

-Chris

here is a small demo program that demonstrates me Bind() AND the static box problem. note that the 2nd level staticbox's heading text does not show and neither does it's border. on 2.4 it shows up just fine, but under 2.6.1 it doesn't at all. i'm in the process of moving to 2.6, but i need to solve that problem first.

------------------------------------------------------------------------

import wx

class MainFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size = (800,600))
               LoginPanel = wx.Panel(self, -1)

        #~ #Make menu items
        ReportMenu = wx.Menu()
               Daily = wx.MenuItem(ReportMenu,wx.NewId(),"&Daily")
        ReportMenu.AppendItem(Daily)
               Menu = wx.MenuBar()
        Menu.Append(ReportMenu,'Reports')
        #Set the menu bar
        self.SetMenuBar(Menu)
               print dir(self)
        #self.Bind(self.wx.EVT_MENU, self.ReportForm, Daily)

        #setup panel sizer
        StaticBox2 = wx.StaticBox(LoginPanel,-1,"sub box")
        StaticBoxSizer2 = wx.StaticBoxSizer(StaticBox2,wx.VERTICAL)
        StaticBoxSizer2.Add(wx.TextCtrl(self,-1,"SECOND LAYER STATIC BOX SIZER"))
               StaticBox = wx.StaticBox(LoginPanel,-1,"Login")
        StaticBoxSizer = wx.StaticBoxSizer(StaticBox,wx.VERTICAL)
        StaticBoxSizer.Add(wx.TextCtrl(self,-1,"FIRST LAYER STATIC BOX SIZER"))
        StaticBoxSizer.Add(StaticBoxSizer2)

        LoginPanel.SetSizer(StaticBoxSizer)
        self.SendSizeEvent()
        LoginPanel.Fit()
       class App(wx.App):
    """This class is the application handle for wxPython"""
    def OnInit(self):
        frame = MainFrame(None, -1, 'exmaple')
        frame.Show(True)
        return True
       
    """Main function, the last thing to run, runs the wxPython application in a loop"""
    App().MainLoop()

Main()

------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: wxPython-users-unsubscribe@lists.wxwidgets.org
For additional commands, e-mail: wxPython-users-help@lists.wxwidgets.org

---------------------------------------------------------------------
To unsubscribe, e-mail: wxPython-users-unsubscribe@lists.wxwidgets.org
For additional commands, e-mail: wxPython-users-help@lists.wxwidgets.org

it works under 2.6.1. i'll just implement it once i have the other bugs worked out for my move to 2.6
i've also logged a windows bug for the staticbox problem

thanks everyone for their time and help

Timothy Smith wrote:

maybe it's because i'm still on 2.4?

Yup that's it. There has been a lot of improvement since 2.4, it will behoove you to switch. If you can't, don't try to use the "new and improved" syntax.

-Chris

···

--
Christopher Barker, Ph.D.
Oceanographer
                                         
NOAA/OR&R/HAZMAT (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception

Chris.Barker@noaa.gov