其他模块

问题描述:

引用对象这里是有问题的代码:其他模块

import wx 


class MyFrame(wx.Frame): 
    """ 
    This is MyFrame. It just shows a few controls on a wxPanel, 
    and has a simple menu. 
    """ 

    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, -1, title, 
          pos=(150, 150), size=(350, 200)) 

     # Create the menubar 
     menuBar = wx.MenuBar() 

     # and a menu 
     menu = wx.Menu() 

     # add an item to the menu, using \tKeyName automatically 
     # creates an accelerator, the third param is some help text 
     # that will show up in the statusbar 
     menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit this simple sample") 

     # bind the menu event to an event handler 
     self.Bind(wx.EVT_MENU, self.OnTimeToClose, id=wx.ID_EXIT) 

     # and put the menu on the menubar 
     menuBar.Append(menu, "&File") 
     self.SetMenuBar(menuBar) 

     self.CreateStatusBar() 

     # Now create the Panel to put the other controls on. 
     panel = wx.Panel(self) 

     # and a few controls 
     text = wx.StaticText(panel, -1, self.istream) 
     text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)) 
     text.SetSize(text.GetBestSize()) 
     btn = wx.Button(panel, -1, "Close") 
     funbtn = wx.Button(panel, -1, "Just for fun...") 

     # bind the button events to handlers 
     self.Bind(wx.EVT_BUTTON, self.OnTimeToClose, btn) 
     self.Bind(wx.EVT_BUTTON, self.OnFunButton, funbtn) 

     # Use a sizer to layout the controls, stacked vertically and with 
     # a 10 pixel border around each 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(text, 0, wx.ALL, 10) 
     sizer.Add(btn, 0, wx.ALL, 10) 
     sizer.Add(funbtn, 0, wx.ALL, 10) 
     panel.SetSizer(sizer) 
     panel.Layout() 


    def OnTimeToClose(self, evt): 
     """Event handler for the button click.""" 
     print "See ya later!" 
     self.Close() 


    def OnFunButton(self, evt): 
     """Event handler for the button click.""" 

     self.istream = raw_input('Press ENTER to EXIT...\n') 


class MyApp(wx.App): 

    def OnInit(self): 
     frame = MyFrame(None, "Simple wxPython App") 
     self.SetTopWindow(frame) 

     print "Print statements go to this stdout window by default." 

     frame.Show(True) 
     return True 


app = MyApp(redirect=True) 
app.MainLoop() 

我得到了MyFrame对象没有属性istream的错误。我不知道为什么这是真的,因为即使在代码资源管理器下的PyScripter中,它也会将istream列为MyFrame的一个属性。我有一种感觉,我错过了一些非常重要的东西。有什么想法吗?

(顺便说一句,忽略缩进错误,其由于代码块的格式。)(被定义哪个预计self.istream

+0

不,缩进错误是由于您没有正确输入问题。准确。 – 2012-04-03 03:52:26

+1

此外,问题的标题是无用的。它与其他模块无关。在'wx.Frame'子类实例上尝试类似“缺少'istream'属性。” – aaronasterling 2012-04-03 04:03:48

__init__方法OnFunButton方法,它定义self.istream之前执行。因此,您看到消息“MyFrame没有属性istream”,因为__init__查找self.istream,但它尚未定义。

在使用变量之前,您需要定义self.istream