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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.