[Tutor] Is this a "Class" problem?
Adrian Greyling
adrian.greyling at gmail.com
Mon Aug 18 18:13:35 CEST 2008
Hi folks!
I hope I'm in the right place to ask this question. I'm new to Python and
have been working through some tutorials and have made it to the GUI
creation stage. All I was hoping to do with the code below, was to open a
"secondary" window and have some text end up on a text_ctrl, but I get an
error message that looks like this:
Traceback (most recent call last):
File "textbox2TEST.py", line 36, in MainToSecond
MySecondFrame.text_ctrl_2.SetValue("This text was generated from the
'MainFrame' window")
AttributeError: type object 'MySecondFrame' has no attribute 'text_ctrl_2'
I'm using wxGlade and SPE together, so almost all of the code is generated
for me. I just don't get why it doesn't work, although I think it has to do
with one class referencing another class, and I'm obviously not doing that
correctly... Any help is much appreciated!
Here's the code that created the error:
import wx
class MyMainFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyMainFrame.__init__
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
self.button_1 = wx.Button(self, -1, "Click me to bring up second
window and write some text")
self.__set_properties()
self.__do_layout()
self.Bind(wx.EVT_BUTTON, self.MainToSecond, self.button_1)
# end wxGlade
def __set_properties(self):
# begin wxGlade: MyMainFrame.__set_properties
self.SetTitle("Main Frame")
# end wxGlade
def __do_layout(self):
# begin wxGlade: MyMainFrame.__do_layout
sizer_1 = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.VERTICAL)
sizer_2.Add(self.text_ctrl_1, 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
sizer_2.Add(self.button_1, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
self.SetSizer(sizer_1)
sizer_1.Fit(self)
self.Layout()
# end wxGlade
def MainToSecond(self, event): # wxGlade: MyMainFrame.<event_handler>
MySecondFrame(self).Show()
MySecondFrame.text_ctrl_2.SetValue("This text was generated from the
'MainFrame' window")
# end of class MyMainFrame
class MySecondFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MySecondFrame.__init__
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.text_ctrl_2 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
self.button_2 = wx.Button(self, -1, "Click me to close this frame
and send some text back to the MainFrame")
self.__set_properties()
self.__do_layout()
# end wxGlade
def __set_properties(self):
# begin wxGlade: MySecondFrame.__set_properties
self.SetTitle("Frame Number Two")
# end wxGlade
def __do_layout(self):
# begin wxGlade: MySecondFrame.__do_layout
sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
sizer_4 = wx.BoxSizer(wx.VERTICAL)
sizer_4.Add(self.text_ctrl_2, 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
sizer_4.Add(self.button_2, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
sizer_3.Add(sizer_4, 1, wx.EXPAND, 0)
self.SetSizer(sizer_3)
sizer_3.Fit(self)
self.Layout()
# end wxGlade
# end of class MySecondFrame
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = MyMainFrame(None, -1, "")
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20080818/91c4b6b1/attachment.htm>
More information about the Tutor
mailing list