wxPython code giving strange errors.

T

teh_sAbEr

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?
 
T

Thin Myrna

teh_sAbEr said:
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
 
M

Mike Driscoll

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?

This code works "as is" on Windows XP. However, I have gotten this
error when trying to run it from IDLE and I've heard that that can
happen in other Tkinter-based IDEs. Try running it from the command
line and I'll bet you won't get that error.

Also, there's a great wxPython user's group you can join from the
official website:

www.wxpython.org

Mike
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top