kath wrote: > hi everyone......... > > I have a task, I have fragmented the task into subtask. I have planned > to create a class to each subclass and one parent class to handle the > sub tasks. Each subclass are saved in seperate file and all my > subclasses and parent class are placed in the same folder. > > The parent class is subclass of wx.Frame, and subclasses are subclass > of wx.Panel. Each subclass will create a GUI for each task.. > > ok.. here is problem > > When a menu is selected in the parent class, im instantiating the child > class(i.e, Panel), which has textbox and two buttons. first button is > used to select a file, and second one I have planned to, read the file > and pass the values to parent class [B]OR[/B] pass the filepath to > parent to read and do rest of the work. > > How do I do that? > > Please tell me whether I am following a correct method, by fragmenting > task into small task and assigning it to child class and saving it in > a separate file?. > > ok, here is the Parent class > [code] > import wx > import client > """My Parent class""" > class Parent(wx.Frame): > def __init__(self, parent, id, title): > wx.Frame.__init__(self, parent, id, title) > > menu=wx.Menu() > menu.Append(5000, "File") > menu.AppendSeparator() > menu.Append(5001, "Exit") > menubar=wx.MenuBar() > menubar.Append(menu, "File") > self.SetMenuBar(menubar) > self.Bind(wx.EVT_MENU, self.OnFile,id=5000) > self.Bind(wx.EVT_MENU, self.OnExit,id=5001) > > def OnFile(self, event): > self.cl=client.Child(self, -1) > > def OnBrowse(self, event): > dir="" > d=x.FileDialog(self, "Choose an Excel file", self.dirname, "", > "*.xls", wx.OPEN) > if d.ShowModal() == wx.ID_OK: > self.filename=d.GetFilename() > self.dirname=d.GetDirectory() > self.filepath.SetValue(os.path.join(self.dirname, > self.filename)) > > def OnUpload(self, event): > pass > > def OnExit(self, event): > self.Close() > > class MyApp(wx.App): > def OnInit(self): > frame=Parent(None, -1, "Parent window") > frame.Show(True) > self.SetTopWindow(frame) > return True > > if __name__ == '__main__': > app=MyApp(redirect=False) > app.MainLoop() > > [/code] > > and Child class > [code] > import wx, os > > """My Child class""" > > class Child(wx.Panel): > def __init__(self, parent, id): > wx.Panel.__init__(self, parent, id, size=(300,300)) > box=wx.BoxSizer(wx.HORIZONTAL) > label=wx.StaticText(self, -1, "File Path: ") > > self.text=wx.TextCtrl(self, -1) > browse=wx.Button(self, -1,"Browse") > upload=wx.Button(self, -1, "Upload") > self.Bind(wx.EVT_BUTTON, self.OnBrowse, browse) > self.Bind(wx.EVT_BUTTON, self.OnUpload, upload) > box.Add(label) > box.Add(self.text) > box.Add(browse) > > mainbox=wx.BoxSizer(wx.VERTICAL) > mainbox.Add(box) > mainbox.Add(upload) > > self.SetSizer(mainbox) > mainbox.Layout() > def OnBrowse(self, event): > self.dir="" > d=wx.FileDialog(self, "Choose an Excel file", self.dir, "", > "*.xls", wx.OPEN) > if d.ShowModal() == wx.ID_OK: > self.filename=d.GetFilename() > self.dir=d.GetDirectory() > self.text.SetValue(os.path.join(self.dir, self.filename)) > > def OnUpload(self, event): > pass > > class MyApp(wx.App): > def OnInit(self): > frame=wx.Frame(None, -1, "Child window") > panel=Child(frame, -1) > frame.Show(True) > self.SetTopWindow(frame) > return True > > if __name__ == '__main__': > app=MyApp() > app.MainLoop() > [/code] > > thank you, > regards, > kath. > You might consider doing it the same way wx passes things around. When you instantiate the subclass pass the parent class' instance as first argument to __init__ method. That way the subclass can easily pass values back to the parent by using that pointer.
-Larry -- http://mail.python.org/mailman/listinfo/python-list