wxPython code giving strange errors.

Thin Myrna no at spam.no
Sun Jul 13 17:25:03 CEST 2008


teh_sAbEr wrote:

> I'm busy trying to learn wxPython, and i'm trying to run the following
> piece of code (its from the wxPyWiki tutorial):
> 
> import wx
> 
> ID_ABOUT = 101
> ID_EXIT = 110
> 
> class MainWindow(wx.Frame):
>     def __init__(self,parent,id,title):
>         wx.Frame.__init__(self,parent,wx.ID_ANY,title,size=(200,100))
>         self.control = wx.TextCtrl(self,1,style=wx.TE_MULTILINE)
>         self.CreateStatusBar()
> 
>         filemenu = wx.Menu()
>         filemenu.Append(ID_ABOUT,"&About"," Information about this
> program.")
>         filemenu.AppendSeparator()
>         filemenu.Append(ID_EXIT,"E&xit"," Terminate the program.")
> 
>         menuBar = wx.MenuBar()
>         menuBar.Append(filemenu,"&File")
>         self.SetMenuBar(menuBar)
>         self.Show(True)
> 
> app = wx.PySimpleApp()
> frame = MainWindow(None, -1, "Sample editor")
> app.MainLoop()
> 
> Simple enough, but every single time I try to run it IDLE gives me
> this instead of the app I was hoping for:
> 
> Traceback (most recent call last):
>   File "C:\Documents and Settings\Enrico Jr\My Documents\Jr's Crap
> \Python Stuff\Batch Picture Converter\main.py", line 24, in <module>
>     frame = MainWindow(None, -1, "Sample editor")
>   File "C:\Documents and Settings\Enrico Jr\My Documents\Jr's Crap
> \Python Stuff\Batch Picture Converter\main.py", line 9, in __init__
>     wx.Frame.__init__(self,parent,wx.ID_ANY,title,size=(200,100))
>   File "C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx
> \_windows.py", line 501, in __init__
>     _windows_.Frame_swiginit(self,_windows_.new_Frame(*args,
> **kwargs))
> PyNoAppError: The wx.App object must be created first!
> 
> As far as I can tell, the wx.App object IS being created first. I
> suspect a race condition of some sort here, but can anyone shed some
> light on this?

The main frame has to be created by the app itself, e.g. like so:


class App(wx.App):

   def OnInit(self):

      self._frame = MainFrame( None, -1, _APP_CAPTION)
      self._frame.Show( True)
      self.SetTopWindow( self._frame)
      return True


def Run():
   app = App()
   app.MainLoop()


if __name__ == '__main__':
   Run()


HTH
Thin




More information about the Python-list mailing list