0

我正在尝试遵循“wxPython in action”一书中的清单 1.3。

我相信我已经编写了代码的精确副本:

"""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()

...但是当我运行代码时收到以下错误消息:

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

任何人都可以找出问题所在 - 提前谢谢。

4

1 回答 1

1

由于缩进错误,您的main子程序和if __name__ == '__main__'位现在属于类。App通过删除前面的四个空格将它们取出:

        ...
        self.SetTopWindow(self.frame)
        return True

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

if __name__ == '__main__':
    main()

另外,请确保wxPython.jpg程序文件夹中有文件,否则程序将无法运行。

PS。在这行代码中:

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

它应该GetHeight()代替GetHight().

于 2013-09-02T09:00:46.937 回答