[Pythonmac-SIG] wxPython -- getting Traceback on errors (was: some disappointment using it.)
Louis Pecora
pecora at anvil.nrl.navy.mil
Thu Apr 13 16:06:05 CEST 2006
Charles Hartman wrote:
> It occurs to me that if you added an OnExit() handler to your app --
> any app that's giving quit-too-soon trouble. The handler could simply
> put up a wx.MessageBox, which gets an OK from the user. This would
> pause the app on the way out, and therefore permit the normal app
> output window (without changing redirection) to stay onscreen as long
> as one liked. A little baroque, but pretty easy.
>
> Charles Hartman
I think I've found the right circumstances in which getting Traceback works.
I tried what you said above, but it didn't work, although I did get the
code to work by providing more path info. Below is the App portion of
the code (the hello.py example 3 in the book Chap.1). I get the code to
work now so long as I have the full path to the graphic image. If I
make an error in the path, the app exits (as it should, I would guess).
The OnExit is not invoked if there is an error. Here are the
circumstances in which it is invoked or not (I tried to put this in a
logical order) :
(1) __init__ (and hence, wx.App.__init__) are not called (both commented
out)
(a) path is wrong, error NO OnExit
(b) path is right, no error NO OnExit
(2) __init__ (and hence, wx.App.__init__) are both called as shown below
(a) redirect= True
(i) path is wrong NO OnExit , but output is in
external file
(ii) path is right YES OnExit , and output is in
external file
(b) redirect= False
(i) path is wrong NO OnExit , but output is to
Terminal with traceback (!)
(ii) path is right YES OnExit, and output is to Terminal
Bottom line: OnExit is only invoked if the program runs without error.
If you want the traceback you have to include a call to wx.App.__init__
and set the type of redirect you want. Note that redirect to the
Terminal works fine then and the whole Traceback appears as one would
like. A good hint for newbies like me.
App portion of my code:
class App(wx.App):
"""Application Class;"""
def __init__(self):
wx.App.__init__(self,redirect=True,
filename="/Users/louispecora/Desktop/Hello.out")
def OnInit(self):
print "***here"
image=wx.Image('/Users/louispecora/Code/python/test_folder/wxPython_learn/rappin_cover150.jpg',
wx.BITMAP_TYPE_JPEG)
self.frame = Frame(image)
self.frame.Show()
self.SetTopWindow(self.frame)
return True
def OnExit(self):
print "In OnExit()"
retCode=wx.MessageBox("Quit?", caption="Message on Quit.")
--
Cheers,
Lou Pecora
Code 6362
Naval Research Lab
Washington, DC 20375
USA
Ph: +202-767-6002
email: pecora at anvil.nrl.navy.mil
More information about the Pythonmac-SIG
mailing list