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

何が問題なのか誰でも理解できますか-前もってthx。

4

1 に答える 1

1

インデントが間違っているためmain、サブルーチンとif __name__ == '__main__'ビットはクラスに属しています。App前の 4 つのスペースを削除して取り出します。

        ...
        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 に答える