|
From: John H. <ec...@ya...> - 2011-04-01 22:43:53
|
I couldn't agree with you more. Earlier there was a post claiming that he
prefers wxPython over Pythoncard. I assume he's using a different animal than
the one I am looking at. Pythoncard is simple, feature rich - and very stable.
I've done numerous projects using Pythoncard.
I've long suggested that somebody release a 1.0 version of Pythoncard. So far,
it has fallen to death ears. If we can all convince the owner to do that, I
can package up what I have done and contribute to the release.
I've hecked together the following controls:
pdfwindow, flashwindow, tree control, minimizable window (minimize to Windows
lauch bar), MDI parent and child windows, sashwindows, ...
I have to stress heck because I did all these kind of blind folded because I
really don't know what's going on most of the time. Wing debugger is my friend.
Controls I tried but unable to get it to work:
matplotlib window, a graphic file viewer widget (works but not behaving
properly), a MDI widget (not window).
--
John Henry
>
>From: Mark Carter <ma...@ma...>
>To: pyt...@li...
>Sent: Fri, April 1, 2011 9:13:02 AM
>Subject: [Pythoncard-users] Added MDI support to Pythoncard (was MDI -
>childwindows within a window)
>
>
>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
> |