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