Who's to blame?

Rob Williscroft rtw at freenet.co.uk
Thu Jan 3 17:48:24 CET 2008

Nicola Musatti wrote in news:92dfc2fc-0677-43c0-b34f-4f240fa40205
@e4g2000hsg.googlegroups.com in comp.lang.python:

Note there is a wxpython mailinglist/newsgroup:


> problem lies in the fact that apparently ShowModal() does not return
> when either the Yes or the No buttons are pressed. Curiously, if you
> change the Yes and No buttons with the OK and Cancel ones that are
> currently commented everything works as expected.

This is because the wx.Dialog class has handlers for the wxID_OK
and wxID_CANCEL button identifiers, IIRC in windows the MS supplied
dialog procedure behaves this way.

> As the sbs_test_xrc.py file below is automatically generated by
> wxPython's XRCed tool from a XRC file which in turn is
> generated by wxFormBuilder (http://wxformbuilder.org/), I really cant
> figure out to whom I should report this problem, assuming I'm not
> missing some obvious mistake of mine, that is.

> class MainFrame(sbs_test_xrc.xrcMainFrame):
>     def __init__(self, parent):
>         sbs_test_xrc.xrcMainFrame.__init__(self, parent)
>         self.button.Bind(wx.EVT_BUTTON, self.OnButton)

First you can make the dialog a member, you are showing and hiding it
so there is no need to create a new one every time OnButton is fired.

          self.dialog = sbs_test_xrc.xrcDialog(self)

          # now replace the defaults of ID_OK and ID_CANCEL
          self.dialog.SetAffirmativeId( wxID_YES )
          self.dialog.SetEscapeId( wxID_NO )

Alternativly you could derive from xrcDialog as you are with
xrcMainFrame and do the above in the derived classes __init__.

>     def OnButton(self, event=None):
>         d = sbs_test_xrc.xrcDialog(self)
> ##        if d.ShowModal() == wx.ID_OK:
>         if d.ShowModal() == wx.ID_YES:
>             self.Close()



More information about the Python-list mailing list