From: Mark C. <ma...@ma...> - 2011-04-01 16:13:30
|
Hi John. Awesome! Good to know someone is still developing PythonCard! PythonCard is really a super project, for infrequent programmers like myself looking for a Visual Basic-like development experience on Python, PythonCard does the job. I don't suppose you could shepherd through a new release? The current release is several years old IIRC, and the installer has issues (either with Vista and/or latest Python, can't recall). Most people who research PythonCard these days just assume it's a dead project. Mark On Fri, Apr 1, 2011 at 10:53 AM, John Henry <ec...@ya...> wrote: > I am happy to report that I've succeeded in Pythoncardize > the wx.SashLayoutWindow control of wxPython > using similar technique to the MDI support I reported previously. Not > sure if > the screen capture attachment to this email will get stripped or not. If > you > don't see the screen shot, shout and I'll try to upload that somewhere. > > ########## mod to model.py ####################### > class Background(BackgroundBase, wx.Frame): > def __init__(self, aParent, aBgRsrc, init=None): > return BackgroundBase.__init__(self, aParent, aBgRsrc, > frameclass=wx.Frame, init=init) > > class MDIChildBackground(BackgroundBase, wx.MDIChildFrame): > def __init__(self, aParent, aBgRsrc, init=None): > return BackgroundBase.__init__(self, aParent, aBgRsrc, > frameclass=wx.MDIChildFrame, init=init) > > class MDIParentBackground(BackgroundBase, wx.MDIParentFrame): > def __init__(self, aParent, aBgRsrc, init=None): > return BackgroundBase.__init__(self, aParent, aBgRsrc, > frameclass=wx.MDIParentFrame, init=init) > > class SashWindow(BackgroundBase, wx.SashLayoutWindow): > def __init__(self, aParent, aBgRsrc, init=None): > rsrc = resource.Resource(aBgRsrc).application.backgrounds[0] > return BackgroundBase.__init__(self, aParent, rsrc, > frameclass=wx.SashLayoutWindow, init=init) > # Dummy routine > def SetMenuBar(self, child): > return > # Dummy routine > def GetStatusBar(self): > return > ########## end of mod to model.py #######################-- > John Henry > > > > ----- Original Message ---- > > From: John Henry <ec...@ya...> > > To: pyt...@li... > > Sent: Wed, March 9, 2011 10:08:39 AM > > Subject: Added MDI support to Pythoncard (was MDI - childwindows within a > >window) > > > > I am happy to let you know that I succeeded in adding MDI support to > Pythoncard > > > > with only a few lines of modifications to the Background class in > model.py > > > > I made the Background class into a BackgroundBase class, and have the > >Background > > > > class subclass from the BackgroundBase class. > > > > Then I added a MDIParentBackground and MDIChildBackground which simply > force > > Background to subclass from wxMDIParentFrame and wxMDIChildFrame > respectively, > > > > instead of the wx.Frame class. Once I've done that, wxPython does the > rest > >of > > > > the work. > > > > ################ mod to model.py ###################### > > > > from wxPython.wx import wxMDIParentFrame, wxMDIChildFrame > > > > # Used to say: > > # class BackgroundBase(Scriptable, wx.Frame, event.EventSource): > > class BackgroundBase(Scriptable, event.EventSource): > > """ > > A window that contains Widgets. > > """ > > def __init__(self, aParent, aBgRsrc, frameclass=wx.Frame): > > ...<original code>... > > #Changed original code from invoking wx.Frame here to a method passed > down > > # First, call the base class' __init__ method to create the > frame > > frameclass.__init__(self, aParent, > > self.id, > > #self.name, > > aBgRsrc.title, > > position, > > aBgRsrc.size, > > style | wx.NO_FULL_REPAINT_ON_RESIZE, > > aBgRsrc.name) > > ...<rest of original code>... > > > > > > class Background(BackgroundBase, wx.Frame): > > def __init__(self, aParent, aBgRsrc): > > return BackgroundBase.__init__(self, aParent, aBgRsrc, > > frameclass=wx.Frame) > > > > class MDIParentBackground(BackgroundBase, wxMDIParentFrame): > > def __init__(self, aParent, aBgRsrc): > > return BackgroundBase.__init__(self, aParent, aBgRsrc, > > frameclass=wxMDIParentFrame) > > > > class MDIChildBackground(BackgroundBase, wxMDIChildFrame): > > def __init__(self, aParent, aBgRsrc): > > return BackgroundBase.__init__(self, aParent, aBgRsrc, > > frameclass=wxMDIChildFrame) > > > > ############## end of mod to model.py ######################### > > > > To use these two new classes, the code is remarkably unremarkable. The > parent > > > > code: > > > > ############# Parent ###################### > > #!/usr/bin/python > > > > """ > > __version__ = "$Revision: 1.5 $" > > __date__ = "$Date: 2004/04/30 16:26:12 $" > > """ > > > > from PythonCard import model > > > > MDI_rsrc=\ > > {'application':{'type':'Application', > > 'name':'Template', > > 'backgrounds': [ > > {'type':'Background', > > 'name':'bgTemplate', > > 'title':'Testing MDI Controls', > > 'size':(400, 300), > > 'style':['resizeable'], > > > > 'menubar': {'type':'MenuBar', > > 'menus': [ > > {'type':'Menu', > > 'name':'menuFile', > > 'label':'&File', > > 'items': [ > > {'type':'MenuItem', > > 'name':'menuFileExit', > > 'label':'E&xit', > > 'command':'exit', > > }, > > ] > > }, > > {'type':'Menu', > > 'name':'menuOptions', > > 'label':'Options', > > 'items': [ > > {'type':'MenuItem', > > 'name':'menuOptionsOpenNew', > > 'label':'Open New\tAlt+N', > > 'command':'openNew', > > }, > > ] > > }, > > ] > > }, > > 'components': [ > > > > ] # end components > > } # end background > > ] # end backgrounds > > } } > > > > MyCW_rsrc=\ > > {'application':{'type':'Application', > > 'name':'Template', > > 'backgrounds': [ > > {'type':'Background', > > 'name':'bgTemplate', > > 'title':'Standard Template with File->Exit menu', > > 'size':(698, 517), > > 'style':['resizeable'], > > > > 'menubar': {'type':'MenuBar', > > 'menus': [ > > {'type':'Menu', > > 'name':'menuFile', > > 'label':'&File', > > 'items': [ > > {'type':'MenuItem', > > 'name':'menuFileExit', > > 'label':'E&xit', > > 'command':'exit', > > }, > > ] > > }, > > {'type':'Menu', > > 'name':'menuOptions', > > 'label':'Options', > > 'items': [ > > {'type':'MenuItem', > > 'name':'menuOptionsOpenNew', > > 'label':'Open New\tAlt+N', > > 'command':'openNew', > > }, > > ] > > }, > > ] > > }, > > 'components': [ > > > > {'type':'TextArea', > > 'name':'TextArea1', > > 'position':(20, 20), > > 'size':(651, 333), > > }, > > > > {'type':'Button', > > 'name':'Button1', > > 'position':(559, 376), > > 'label':'Button1', > > }, > > > > ] # end components > > } # end background > > ] # end backgrounds > > } } > > > > class MyBackground(model.MDIParentBackground): > > > > def on_initialize(self, event): > > # if you have any initialization > > # including sizer setup, do it here > > #MDI.on_initialize(self, event) > > pass > > def on_openNew_command ( self, event ): > > # Create a child window > > child = model.childWindow(self, MyCW, rsrc=MyCW_rsrc) > > > > if __name__ == '__main__': > > app = model.Application(MyBackground, None, MDI_rsrc) > > app.MainLoop() > > ############# End of Parent ###################### > > > > ############# Child ###################### > > class MyCW(model.MDIChildBackground): > > > > def on_initialize(self, event): > > self.parent = self.getParent() > > self.components.TextArea1.text='I am only a child.' > > def on_openNew_command ( self, event ): > > return self.parent.on_openNew_command ( event ) > > ############# End of Child ###################### > > > > That's it!!! > > > > Now I have to play around with resizer to see how that would work here. > > > > -- > > John Henry > > > > ------------------------------------------------------------------------------ > Create and publish websites with WebMatrix > Use the most popular FREE web apps or write code yourself; > WebMatrix provides all the features you need to develop and > publish your website. http://p.sf.net/sfu/ms-webmatrix-sf > > _______________________________________________ > Pythoncard-users mailing list > Pyt...@li... > https://lists.sourceforge.net/lists/listinfo/pythoncard-users > > -- Mark Carter, OCT markcarter.tel -- Mark Carter, OCT markcarter.tel |