0

I'm trying to follow Listing 1.3 from the book 'wxPython in action'.

I believe I've written an exact copy of the code:

"""Hello, wxPython! program.""" import wx class Frame(wx.Frame): """Frame class that displays an image.""" def __init__(self,image, parent=None, id=-1, pos=wx.DefaultPosition, title='Hello, wxPython!'): """Create a Frame instance and display image.""" temp = image.ConvertToBitmap() size = temp.GetWidth(), temp.GetHight() wx.Frame.__init__(self, parent, id, title, pos, size) self.bmp = wx.StaticBitmap(parent = self, bitmap = temp) class App(wx.App): """Application class.""" def OnInit(self): image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG) self.frame = Frame(image) self.frame.Show() self.SetTopWindow(self.frame) return True def main(): app = App() app.MainLoop() if __name__ == '__main__': main() 

...but I get the following error message when I run the code:

>>> Traceback (most recent call last): File "<string>", line 254, in run_nodebug File "\\ri-file-2\cst$\image.py", line 28, in <module> class App(wx.App): File "\\ri-file-2\cst$\image.py", line 43, in App main() File "\\ri-file-2\cst$\image.py", line 39, in main app = App() NameError: global name 'App' is not defined >>> 

Can anybody figure out what's wrong - thx in advance.

1 Answer 1

1

Your main subroutine and if __name__ == '__main__' bit now belong to App class due to wrong indentation. Take them out by deleting preceding four spaces:

 ... self.SetTopWindow(self.frame) return True def main(): app = App() app.MainLoop() if __name__ == '__main__': main() 

Also, make sure that you have wxPython.jpg file in the program folder, otherwise the program won't run.

PS. In this line of the code:

 size = temp.GetWidth(), temp.GetHight() 

it should be GetHeight() instead of GetHight().

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.