You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
(45) |
May
(185) |
Jun
|
Jul
(36) |
Aug
(205) |
Sep
(98) |
Oct
(107) |
Nov
(6) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(1) |
Feb
(2) |
Mar
(19) |
Apr
(26) |
May
(18) |
Jun
|
Jul
(12) |
Aug
(16) |
Sep
(22) |
Oct
(7) |
Nov
(11) |
Dec
(74) |
2006 |
Jan
(14) |
Feb
(1) |
Mar
(3) |
Apr
(3) |
May
(14) |
Jun
(5) |
Jul
(20) |
Aug
(10) |
Sep
(1) |
Oct
|
Nov
(4) |
Dec
(1) |
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(3) |
Jul
(14) |
Aug
|
Sep
|
Oct
(6) |
Nov
(1) |
Dec
|
From: Kevin A. <ka...@us...> - 2005-12-30 06:29:46
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24516 Modified Files: walkthrough3.html Log Message: changed on_menuFileExit_select to on_exit_command and added explanation hopefully this makes the walkthrough work again and is understandable Index: walkthrough3.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough3.html,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** walkthrough3.html 26 Dec 2005 08:53:46 -0000 1.10 --- walkthrough3.html 30 Dec 2005 06:29:36 -0000 1.11 *************** *** 227,235 **** self.visible = False ! def on_menuFileExit_select(self, event): self.close() </pre> ! <p>As the above code shows, the File->Exit menu item just calls the ! close() to close the window. That is the same as clicking the close box on the window and triggers the close window event, so that on_close is called. We placed the work to be done when the document is closing in the --- 227,237 ---- self.visible = False ! def on_exit_command(self, event): self.close() </pre> ! <p>The resource file (minimal.rsrc.py) defines an exit command for the File->Exit menu ! so we use a command handler to override the default behavior. ! As the above code shows, the File->Exit menu item just calls the ! close() method to close the window. That is the same as clicking the close box on the window and triggers the close window event, so that on_close is called. We placed the work to be done when the document is closing in the |
From: Kevin A. <ka...@us...> - 2005-12-29 20:48:51
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27312 Modified Files: documentation.py Log Message: changed spec to objspec Index: documentation.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/documentation.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** documentation.py 29 Dec 2005 20:36:25 -0000 1.1 --- documentation.py 29 Dec 2005 20:48:43 -0000 1.2 *************** *** 1,6 **** import inspect, os, time, inspect import wx ! from PythonCard import dialog, spec --- 1,13 ---- + """ + __version__ = "$Revision$" + __date__ = "$Date$" + """ + + # the start of some functions to help generate documentation for PythonCard + import inspect, os, time, inspect import wx ! from PythonCard import dialog *************** *** 23,34 **** return listX ! def getEventsList(spec): ! events = [e.name for e in spec.getEvents()] events.sort() return events ! def getMethodsList(object): listX = [] ! methods = inspect.getmembers(object, inspect.ismethod) for m in methods: if m[0][0] in "abcdefghijklmnopqrstuvwxyz": --- 30,41 ---- return listX ! def getEventsList(objspec): ! events = [e.name for e in objspec.getEvents()] events.sort() return events ! def getMethodsList(obj): listX = [] ! methods = inspect.getmembers(obj, inspect.ismethod) for m in methods: if m[0][0] in "abcdefghijklmnopqrstuvwxyz": *************** *** 36,39 **** --- 43,47 ---- return listX + def dumpDocs(self): result = dialog.directoryDialog(None, 'Create documention in:', '') *************** *** 46,50 **** w = self name = w.__class__.__name__ ! spec = w._spec doc = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' --- 54,58 ---- w = self name = w.__class__.__name__ ! objspec = w._spec doc = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' *************** *** 57,61 **** doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in getAttributesList(spec.getRequiredAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' --- 65,69 ---- doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in getAttributesList(objspec.getRequiredAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' *************** *** 64,68 **** doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in getAttributesList(spec.getOptionalAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' --- 72,76 ---- doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in getAttributesList(objspec.getOptionalAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' *************** *** 73,77 **** ## doc += '\n\n<h2>Events:</h2>\n' ## doc += '<table border="1">\n' ! ## for e in getEventsList(spec): ## doc += "<tr><td>%s</td></tr>\n" % e ## doc += '</table>' --- 81,85 ---- ## doc += '\n\n<h2>Events:</h2>\n' ## doc += '<table border="1">\n' ! ## for e in getEventsList(objspec): ## doc += "<tr><td>%s</td></tr>\n" % e ## doc += '</table>' *************** *** 125,129 **** # document each widget name = w.__class__.__name__ ! spec = w._spec doc = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' --- 133,137 ---- # document each widget name = w.__class__.__name__ ! objspec = w._spec doc = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' *************** *** 136,140 **** doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in getAttributesList(spec.getRequiredAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' --- 144,148 ---- doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in getAttributesList(objspec.getRequiredAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' *************** *** 143,147 **** doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in getAttributesList(spec.getOptionalAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' --- 151,155 ---- doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in getAttributesList(objspec.getOptionalAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' *************** *** 149,153 **** doc += '\n\n<h2>Events:</h2>\n' doc += '<table border="1">\n' ! for e in getEventsList(spec): doc += "<tr><td>%s</td></tr>\n" % e doc += '</table>' --- 157,161 ---- doc += '\n\n<h2>Events:</h2>\n' doc += '<table border="1">\n' ! for e in getEventsList(objspec): doc += "<tr><td>%s</td></tr>\n" % e doc += '</table>' |
From: Kevin A. <ka...@us...> - 2005-12-29 20:37:24
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25353 Modified Files: model.py Log Message: added _spec attribute to Background Index: model.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/model.py,v retrieving revision 1.194 retrieving revision 1.195 diff -C2 -d -r1.194 -r1.195 *** model.py 2 Nov 2005 12:08:52 -0000 1.194 --- model.py 29 Dec 2005 20:37:16 -0000 1.195 *************** *** 627,630 **** --- 627,638 ---- self.id = wx.NewId() self.resource = aBgRsrc + # KEA 2005-12-29 + # this is a hack to make sure the background has a defined spec + # attribute for documentation purposes, but the spec should be defined + # just like we do for components + # Also need to verify that the currently defined component specs are + # being used to enforce the attributes when loading a resource and not + # just using the default defined in spec.py + self._spec = aBgRsrc._spec.getEntry('Background') self.application = wx.GetApp() self.setName(aBgRsrc.name) |
From: Kevin A. <ka...@us...> - 2005-12-29 20:36:36
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24928 Added Files: documentation.py Log Message: added documentation.py, moved old dumpDocs and helper functions out of widgets.py and created a new function to document a background --- NEW FILE: documentation.py --- import inspect, os, time, inspect import wx from PythonCard import dialog, spec # KEA 2002-05-07 # some methods to build up component documentation # using the built-in component specs def getAttributesList(attributes): names = [a for a in attributes] names.sort() listX = [] for n in names: if attributes[n].hasDefaultValueList(): listX.append([n, attributes[n].getDefaultValueList()]) else: value = attributes[n].getDefaultValue() if value == '': value = "''" listX.append([n, value]) return listX def getEventsList(spec): events = [e.name for e in spec.getEvents()] events.sort() return events def getMethodsList(object): listX = [] methods = inspect.getmembers(object, inspect.ismethod) for m in methods: if m[0][0] in "abcdefghijklmnopqrstuvwxyz": listX.append(m[0]) return listX def dumpDocs(self): result = dialog.directoryDialog(None, 'Create documention in:', '') if result.accepted: widgetsDir = result.path dumpBackgroundDocs(self, widgetsDir) # self.dumpComponentDocs(widgetsDir) def dumpBackgroundDocs(self, widgetsDir): w = self name = w.__class__.__name__ spec = w._spec doc = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' doc += '<html>\n<head><title>%s</title></head><body>\n' % (name + ': PythonCard Background') doc += '<h1>Background: %s</h1>' % name doc += '\n<img src="%s"><BR>\n' % ('images/' + name + '.png') doc += '\n<h2>Required Attributes</h2>\n' doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' for a in getAttributesList(spec.getRequiredAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' doc += '\n\n<h2>Optional Attributes</h2>\n' doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' for a in getAttributesList(spec.getOptionalAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' # KEA 2005-12-29 # Background spec still using default in spec.py so doesn't have # events defined like it should ## doc += '\n\n<h2>Events:</h2>\n' ## doc += '<table border="1">\n' ## for e in getEventsList(spec): ## doc += "<tr><td>%s</td></tr>\n" % e ## doc += '</table>' doc += '\n\n<h2>Methods:</h2>\n' doc += '<table border="1">\n' td = '<td><b>%s</b></td>' * 4 tr = '<tr>' + td + '</tr>\n' doc += tr % ('method', 'args', 'doc string', 'comments') for e in getMethodsList(w): method = getattr(w, e) docstring = inspect.getdoc(method) if docstring is None: docstring = " " comments = inspect.getcomments(method) if comments is None: comments = " " #source = inspect.getcomments(method) argspec = inspect.getargspec(method) formattedargs = inspect.formatargspec(argspec[0], argspec[1], argspec[2], argspec[3]) doc += "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n" % \ (e, formattedargs, docstring, comments) doc += '</table>' # write out the documentation for the component doc += '\n<hr><img src="http://sourceforge.net/sflogo.php?group_id=19015&type=1" width="88" height="31" border="0" alt="SourceForge Logo">' doc += '\n<p>Last updated: %s</p>' % time.strftime("%B %d, %Y") doc += '\n</body>\n</html>' filename = name + '.html' path = os.path.join(widgetsDir, filename) f = open(path, 'w') f.write(doc) f.close() def dumpComponentDocs(self, widgetsDir): widgetsDir = os.path.join(widgetsDir, 'components') if not os.path.exists(widgetsDir): os.mkdir(widgetsDir) imagesDir = os.path.join(widgetsDir, 'images') if not os.path.exists(imagesDir): os.mkdir(imagesDir) toc = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' toc += '<html>\n<head><title>%s</title></head><body>\n' % 'PythonCard Components' toc += '<h1>PythonCard Components</h1>\n' componentsList = [] for w in self.components.itervalues(): if w.__class__.__name__.startswith(w.name[3:]): # document each widget name = w.__class__.__name__ spec = w._spec doc = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' doc += '<html>\n<head><title>%s</title></head><body>\n' % (name + ': PythonCard component') doc += '<h1>Component: %s</h1>' % name doc += '\n<img src="%s"><BR>\n' % ('images/' + name + '.png') doc += '\n<h2>Required Attributes</h2>\n' doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' for a in getAttributesList(spec.getRequiredAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' doc += '\n\n<h2>Optional Attributes</h2>\n' doc += '<table border="1">\n' doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' for a in getAttributesList(spec.getOptionalAttributes()): doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) doc += '</table>' doc += '\n\n<h2>Events:</h2>\n' doc += '<table border="1">\n' for e in getEventsList(spec): doc += "<tr><td>%s</td></tr>\n" % e doc += '</table>' doc += '\n\n<h2>Methods:</h2>\n' doc += '<table border="1">\n' td = '<td><b>%s</b></td>' * 4 tr = '<tr>' + td + '</tr>\n' doc += tr % ('method', 'args', 'doc string', 'comments') for e in getMethodsList(w): method = getattr(w, e) docstring = inspect.getdoc(method) if docstring is None: docstring = " " comments = inspect.getcomments(method) if comments is None: comments = " " #source = inspect.getcomments(method) argspec = inspect.getargspec(method) formattedargs = inspect.formatargspec(argspec[0], argspec[1], argspec[2], argspec[3]) doc += "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n" % \ (e, formattedargs, docstring, comments) doc += '</table>' # need to decide what we want to dump from the methods # we probably don't want to dump everything including # wxPython methods, so this is where we need to decide # on the case of the first letter of the method # whatever is done here should be the same thing used # to display methods in the shell # arg lists and tooltips (docstrings) will be used here too # write out the documentation for the component doc += '\n<hr><img src="http://sourceforge.net/sflogo.php?group_id=19015&type=1" width="88" height="31" border="0" alt="SourceForge Logo">' doc += '\n<p>Last updated: %s</p>' % time.strftime("%B %d, %Y") doc += '\n</body>\n</html>' filename = name + '.html' path = os.path.join(widgetsDir, filename) f = open(path, 'w') f.write(doc) f.close() # create an image using the actual component # on screen # comment this out once you have created the images # you want bmp = wx.EmptyBitmap(w.size[0], w.size[1]) memdc = wx.MemoryDC() memdc.SelectObject(bmp) dc = wx.WindowDC(w) memdc.BlitPointSize((0, 0), w.size, dc, (0, 0)) imgfilename = os.path.join(imagesDir, name + '.png') bmp.SaveFile(imgfilename, wx.BITMAP_TYPE_PNG) dc = None memdc.SelectObject(wx.NullBitmap) memdc = None bmp = None componentsList.append('<a href="%s">%s</a><br>\n' % (filename, name)) # now create the table of contents, index.html componentsList.sort() for c in componentsList: toc += c toc += '\n<hr><img src="http://sourceforge.net/sflogo.php?group_id=19015&type=1" width="88" height="31" border="0" alt="SourceForge Logo">' toc += '\n</body>\n</html>' filename = os.path.join(widgetsDir, 'index.html') f = open(filename, 'w') f.write(toc) f.close() |
From: Kevin A. <ka...@us...> - 2005-12-29 20:36:33
|
Update of /cvsroot/pythoncard/PythonCard/samples/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24928/samples/widgets Modified Files: widgets.py Log Message: added documentation.py, moved old dumpDocs and helper functions out of widgets.py and created a new function to document a background Index: widgets.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/samples/widgets/widgets.py,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -d -r1.44 -r1.45 *** widgets.py 18 Sep 2005 03:59:22 -0000 1.44 --- widgets.py 29 Dec 2005 20:36:25 -0000 1.45 *************** *** 11,17 **** from PythonCard import dialog, model - import os - import inspect - import wx BORDER = 5 --- 11,14 ---- *************** *** 242,395 **** - # KEA 2002-05-07 - # some methods to build up component documentation - # using the built-in component specs - - def getAttributesList(self, attributes): - names = [a for a in attributes] - names.sort() - listX = [] - for n in names: - if attributes[n].hasDefaultValueList(): - listX.append([n, attributes[n].getDefaultValueList()]) - else: - value = attributes[n].getDefaultValue() - if value == '': - value = "''" - listX.append([n, value]) - return listX - - def getEventsList(self, spec): - events = [e.name for e in spec.getEvents()] - events.sort() - return events - - def getMethodsList(self, object): - listX = [] - methods = inspect.getmembers(object, inspect.ismethod) - for m in methods: - if m[0][0] in "abcdefghijklmnopqrstuvwxyz": - listX.append(m[0]) - return listX - def on_menuFileDumpWidgets_select(self, event): self.dumpDocs() def dumpDocs(self): ! #try: ! result = dialog.directoryDialog(None, 'Create widgets_documention in:', '') if result.accepted: widgetsDir = result.path ! else: ! return ! widgetsDir = os.path.join(widgetsDir, 'components') ! if not os.path.exists(widgetsDir): ! os.mkdir(widgetsDir) ! imagesDir = os.path.join(widgetsDir, 'images') ! if not os.path.exists(imagesDir): ! os.mkdir(imagesDir) ! ! toc = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' ! toc += '<html>\n<head><title>%s</title></head><body>\n' % 'PythonCard Components' ! toc += '<h1>PythonCard Components</h1>\n' ! componentsList = [] ! ! for w in self.components.itervalues(): ! if w.__class__.__name__.startswith(w.name[3:]): ! # document each widget ! name = w.__class__.__name__ ! spec = w._spec ! ! doc = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' ! doc += '<html>\n<head><title>%s</title></head><body>\n' % (name + ': PythonCard component') ! doc += '<h1>Component: %s</h1>' % name ! ! doc += '\n<img src="%s"><BR>\n' % ('images/' + name + '.png') ! ! doc += '\n<h2>Required Attributes</h2>\n' ! doc += '<table border="1">\n' ! doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in self.getAttributesList(spec.getRequiredAttributes()): ! doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) ! doc += '</table>' ! ! doc += '\n\n<h2>Optional Attributes</h2>\n' ! doc += '<table border="1">\n' ! doc += '<tr><td><b>Name<b></td><td><b>Default value</b></td></tr>\n' ! for a in self.getAttributesList(spec.getOptionalAttributes()): ! doc += "<tr><td>%s</td><td>%s</td></tr>\n" % (a[0], a[1]) ! doc += '</table>' ! ! doc += '\n\n<h2>Events:</h2>\n' ! doc += '<table border="1">\n' ! for e in self.getEventsList(spec): ! doc += "<tr><td>%s</td></tr>\n" % e ! doc += '</table>' ! ! doc += '\n\n<h2>Methods:</h2>\n' ! doc += '<table border="1">\n' ! td = '<td><b>%s</b></td>' * 4 ! tr = '<tr>' + td + '</tr>\n' ! doc += tr % ('method', 'args', 'doc string', 'comments') ! for e in self.getMethodsList(w): ! method = getattr(w, e) ! docstring = inspect.getdoc(method) ! if docstring is None: ! docstring = " " ! comments = inspect.getcomments(method) ! if comments is None: ! comments = " " ! #source = inspect.getcomments(method) ! argspec = inspect.getargspec(method) ! formattedargs = inspect.formatargspec(argspec[0], argspec[1], argspec[2], argspec[3]) ! doc += "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n" % \ ! (e, formattedargs, docstring, comments) ! doc += '</table>' ! ! # need to decide what we want to dump from the methods ! # we probably don't want to dump everything including ! # wxPython methods, so this is where we need to decide ! # on the case of the first letter of the method ! # whatever is done here should be the same thing used ! # to display methods in the shell ! # arg lists and tooltips (docstrings) will be used here too ! ! # write out the documentation for the component ! doc += '\n<hr><img src="http://sourceforge.net/sflogo.php?group_id=19015&type=1" width="88" height="31" border="0" alt="SourceForge Logo">' ! doc += '\n</body>\n</html>' ! filename = name + '.html' ! path = os.path.join(widgetsDir, filename) ! f = open(path, 'w') ! f.write(doc) ! f.close() ! ! # create an image using the actual component ! # on screen ! # comment this out once you have created the images ! # you want ! bmp = wx.EmptyBitmap(w.size[0], w.size[1]) ! memdc = wx.MemoryDC() ! memdc.SelectObject(bmp) ! dc = wx.WindowDC(w) ! memdc.BlitPointSize((0, 0), w.size, dc, (0, 0)) ! imgfilename = os.path.join(imagesDir, name + '.png') ! bmp.SaveFile(imgfilename, wx.BITMAP_TYPE_PNG) ! dc = None ! memdc.SelectObject(wx.NullBitmap) ! memdc = None ! bmp = None ! ! componentsList.append('<a href="%s">%s</a><br>\n' % (filename, name)) - # now create the table of contents, index.html - componentsList.sort() - for c in componentsList: - toc += c - toc += '\n<hr><img src="http://sourceforge.net/sflogo.php?group_id=19015&type=1" width="88" height="31" border="0" alt="SourceForge Logo">' - toc += '\n</body>\n</html>' - filename = os.path.join(widgetsDir, 'index.html') - f = open(filename, 'w') - f.write(toc) - f.close() if __name__ == '__main__': --- 239,253 ---- def on_menuFileDumpWidgets_select(self, event): self.dumpDocs() def dumpDocs(self): ! from PythonCard import documentation ! ! result = dialog.directoryDialog(None, 'Create documention in:', '') if result.accepted: widgetsDir = result.path ! documentation.dumpComponentDocs(self, widgetsDir) if __name__ == '__main__': |
From: Kevin A. <ka...@us...> - 2005-12-29 20:36:33
|
Update of /cvsroot/pythoncard/PythonCard/docs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24928/docs Modified Files: changelog.txt Log Message: added documentation.py, moved old dumpDocs and helper functions out of widgets.py and created a new function to document a background Index: changelog.txt =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/changelog.txt,v retrieving revision 1.321 retrieving revision 1.322 diff -C2 -d -r1.321 -r1.322 *** changelog.txt 26 Dec 2005 19:03:53 -0000 1.321 --- changelog.txt 29 Dec 2005 20:36:25 -0000 1.322 *************** *** 9,12 **** --- 9,14 ---- Release 0.8.2 2006-01-?? + created documentation.py module to hold code previously in widgets.py + for automatically generating component and background docs added getTextExtent and getFullTextExtent methods to BitmapCanvas revised internationalResourceName to support platform-specific resources |
From: Alex T. <ale...@us...> - 2005-12-29 02:48:38
|
Update of /cvsroot/pythoncard/PythonCard/tools/oneEditor In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1836 Modified Files: codePage.py tabcodeEditor.py Log Message: Ensure focus is on the document, not on the notebook/tab (needed for wxPython 2.6) Index: tabcodeEditor.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/oneEditor/tabcodeEditor.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** tabcodeEditor.py 19 Dec 2005 23:20:55 -0000 1.14 --- tabcodeEditor.py 29 Dec 2005 02:48:25 -0000 1.15 *************** *** 1272,1275 **** --- 1272,1276 ---- self.updateTitleBar() self.setResourceFile() + wx.CallAfter(self.currentPage.SetFocus) event.skip() Index: codePage.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/oneEditor/codePage.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** codePage.py 10 Oct 2004 23:38:29 -0000 1.4 --- codePage.py 29 Dec 2005 02:48:25 -0000 1.5 *************** *** 118,121 **** --- 118,122 ---- self.autoSetEOL() self.topLevelParent.setTitleBar(os.path.split(path)[-1]) + wx.CallAfter(self.components.document.SetFocus) except: pass |
From: Kevin A. <ka...@us...> - 2005-12-28 04:05:34
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17318 Modified Files: walkthrough1.html Log Message: capitalization correction and minor wording tweak Index: walkthrough1.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough1.html,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** walkthrough1.html 27 Dec 2005 18:50:53 -0000 1.21 --- walkthrough1.html 28 Dec 2005 04:05:22 -0000 1.22 *************** *** 148,154 **** this window are built into PythonCard. Causing them to appear, and determining what the user selected or did with them, is, as you'll learn in a later ! walk-through, pretty straight-forward. Click on the "Alert" line. A small dialog appears. Click the "OK" button. Notice that in the ! Sample Dialogs window, you can see the name of the dialog (AlertDialog), and whether the user accepted or canceled the dialog. You can also see what information the program returned to PythonCard as a result of the user's --- 148,154 ---- this window are built into PythonCard. Causing them to appear, and determining what the user selected or did with them, is, as you'll learn in a later ! walk-through, pretty straight-forward. Click on the "alert" line. A small dialog appears. Click the "OK" button. Notice that in the ! Sample Dialogs window, you can see the name of the dialog (alertDialog), and whether the user accepted or canceled the dialog. You can also see what information the program returned to PythonCard as a result of the user's *************** *** 249,253 **** development environment to provide helpful supporting windows that tell us what's going on in our application. We'll also see how to start and build our ! own application, using the PythonCard built-in graphic editor, the Resource Editor.</p> <p>We'll be producing more of these walk-through documents on other aspects --- 249,253 ---- development environment to provide helpful supporting windows that tell us what's going on in our application. We'll also see how to start and build our ! own application, using the PythonCard's built-in layout editor, the Resource Editor.</p> <p>We'll be producing more of these walk-through documents on other aspects |
From: Kevin A. <ka...@us...> - 2005-12-27 19:49:44
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28404 Added Files: macosx_tiger_installation.html Log Message: copy of panther install instructions to be modified for tiger --- NEW FILE: macosx_tiger_installation.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="PythonCard.css" type="text/css"/> <meta name="author" content="Kevin Altis" /> <title>Installing PythonCard on Mac OS X (Panther)</title> </head> <body> <div id="banner"> <h1>How to Install PythonCard on Mac OS X (Panther)</h1> </div> <?php include "sidebar.php" ?> <div id="content"> <p><strong>The instructions below are for installing PythonCard on Mac OS 10.3 (Panther). If you are using Mac OS 10.2 (Jaguar), then please use <a href="macosx_jaguar_installation.html">these instructions</a> instead. </strong></p> <p>Installing PythonCard on your system requires the following steps:</p> <ol> <li>Download MacPython add-ons from MacPython site.</li> <li>Download wxPython from the wxPython.org site.</li> <li>Download PythonCard from the PythonCard site.</li> <li>Install MacPython add-ons</li> <li>Install wxPython</li> <li>Install PythonCard</li> <li>Confirm the installation works</li> </ol> <h2>Downloading MacPython add-ons</h2> <p>If you're running Panther then you already have Python 2.3 installed on your system, but we want to get the MacPython add-ons to get the PackageManager and PythonLauncher.</p> <p>Click on this <a href="http://ftp.cwi.nl/jack/python/mac/MacPython-Panther-2.3-2.dmg">MacPython-Panther-2.3-2.dmg</a> link to begin the download. Most Mac OS X browsers will save the file to your desktop.</p> <h2>Downloading wxPython</h2> <p>PythonCard relies on the wxPython package. Click on this <a href="http://prdownloads.sourceforge.net/wxpython/wxPythonOSX-2.5.2.8-panther-Py2.3.dmg">wxPythonOSX-2.5.2.8-panther-Py2.3.dmg</a> link to begin the download. Again, most Mac OS X browsers will save the file to your desktop.</p> <h2>Downloading PythonCard</h2> <p>The latest version of PythonCard is always available via the <a href="http://sourceforge.net/project/showfiles.php?group_id=19015">PythonCard download page</a>. Click on this <a href="http://prdownloads.sourceforge.net/pythoncard/PythonCard-0.8.1.tar.gz">PythonCard-0.8.1.tar.gz</a> link to begin the download. Again, most Mac OS X browsers will save the file to your desktop.</p> <h2>Installing MacPython add-ons</h2> <p>The MacPython add-ons arrive at your system as an installable disk image. All you have to do is double-click on the file you downloaded (it's called MacPython-Panther-2.3-2.dmg), then double-click the MacPython-Panther.pkg icon and follow the instructions in the installation wizard. The installer will create a MacPython-2.3 directory in your Applications folder.</p> <h2>Installing wxPython</h2> <p>wxPython also comes as an installable disk image. Just double-click on the file you downloaded (it's called wxPythonOSX-2.5.2.8-panther-Py2.3.dmg), then double-click the wxPythonOSX-panther.pkg icon and follow the instructions. wxPython will be installed into <span class="code">/Library/Python/2.3/</span>. Note that this is the same directory as <span class="code">/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/</span> since the two directories are connected by a symbolic link in the file system.</p> <p>I recommend creating a wxPython folder in your Applications folder and copying the Apps, Docs, Samples, and README 1st.txt files to the wxPython folder.</p> <h2>Installing PythonCard</h2> <p>The PythonCard-0.8.1.tar.gz file you downloaded should automatically be decompressed by Stuffit; if the file isn't already decompressed, then double-click the PythonCard-0.8.1.tar.gz file. You should now have a PythonCard-0.8 directory on your desktop. Open the Terminal application and do a cd to that directory and then run the setup.py script using the 2.3 Python you just installed. The sudo command will prompt you for your password.</p> <p class="code"> [mymachine:~] bob% cd ~/Desktop/PythonCard-0.8<br /> [mymachine:~/Desktop/PythonCard-0.8] bob% sudo python setup.py install</p> <p>By default, the PythonCard framework will be installed into <span class="code">/Library/Python/2.3/PythonCard/</span>. You'll probably want to make an alias to this directory to keep on your desktop or home folder to make it easier to get to the PythonCard tools and samples.</p> <h2>Confirming Installation</h2> <p>To run GUI scripts on Mac OS X (i.e. wxPython and PythonCard scripts) from the Terminal you must start them with pythonw rather than the plain python interpreter.</p> <h3>Configuring PythonLauncher</h3> <p>The default install leaves .py and .pyw files associated with the Python IDE rather than PythonLauncher which is the app used to run Python scripts from the Finder. PythonLauncher is located in your Applications/MacPython-2.3 folder</p> <p>If you select a .py file you can choose Get Info from the File menu and then change the files to open with PythonLauncher instead of the IDE if you want to be able to double-click a file and have it run. Repeat the process for .pyw files. Alternatively, you can hold down the control key and when you click on a .py file then you can select PythonLauncher from the Open With menu item.</p> <p class="imageCaption"><img src="http://pythoncard.sourceforge.net/images/pythonlauncher.png" alt="Mac Preferences Dialog" /><br /> Figure 1. PythonLauncher Preferences</p> <h3>Acid Test</h3> <p>OK, now comes the acid test. Open the folder called "minimal" in <span class="code">/Library/Python/2.3/PythonCard/samples</span>. Find the icon labeled minimal.py and double-click it. In a few moments (after an operating system console window has appeared), a small window like the one shown in Figure 2 will appear. This indicates that your installation was successful and everything is working. Close the minimal application in the usual way and proceed with the Walk-Through.</p> <p class="imageCaption"><img src="http://pythoncard.sourceforge.net/images/minimal_panther.png" alt="Minimal Sample" /><br /> Figure 2. PythonCard minimal application window open to confirm installation is correct</p> <p>If for some reason this test fails, go back over these instructions carefully. In particular, make sure that wxPython and PythonCard both appear in the site-packages folder in Python's Lib folder.</p> <p>If everything seems OK and you still can't get minimal.py to launch, post a message to the PythonCard Users Mailing List. (If you aren't yet a member, visit the <a href="http://lists.sourceforge.net/lists/listinfo/pythoncard-users">list management page</a> and join.)</p> <p><a href="walkthrough1.html">Back to Walk-Through</a></p> <?php include "footer.php" ?> <p>$Revision: 1.1 $ : $Author: kasplat $ : Last updated $Date: 2005/12/27 19:49:28 $</p> </div> <!-- end of content --> </body> </html> |
From: Kevin A. <ka...@us...> - 2005-12-27 19:47:05
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27983 Added Files: macosx_panther_installation.html Log Message: added panther doc so tiger can become default --- NEW FILE: macosx_panther_installation.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="PythonCard.css" type="text/css"/> <meta name="author" content="Kevin Altis" /> <title>Installing PythonCard on Mac OS X (Panther)</title> </head> <body> <div id="banner"> <h1>How to Install PythonCard on Mac OS X (Panther)</h1> </div> <?php include "sidebar.php" ?> <div id="content"> <p><strong>The instructions below are for installing PythonCard on Mac OS 10.3 (Panther). If you are using Mac OS 10.2 (Jaguar), then please use <a href="macosx_jaguar_installation.html">these instructions</a> instead. </strong></p> <p>Installing PythonCard on your system requires the following steps:</p> <ol> <li>Download MacPython add-ons from MacPython site.</li> <li>Download wxPython from the wxPython.org site.</li> <li>Download PythonCard from the PythonCard site.</li> <li>Install MacPython add-ons</li> <li>Install wxPython</li> <li>Install PythonCard</li> <li>Confirm the installation works</li> </ol> <h2>Downloading MacPython add-ons</h2> <p>If you're running Panther then you already have Python 2.3 installed on your system, but we want to get the MacPython add-ons to get the PackageManager and PythonLauncher.</p> <p>Click on this <a href="http://ftp.cwi.nl/jack/python/mac/MacPython-Panther-2.3-2.dmg">MacPython-Panther-2.3-2.dmg</a> link to begin the download. Most Mac OS X browsers will save the file to your desktop.</p> <h2>Downloading wxPython</h2> <p>PythonCard relies on the wxPython package. Click on this <a href="http://prdownloads.sourceforge.net/wxpython/wxPythonOSX-2.5.2.8-panther-Py2.3.dmg">wxPythonOSX-2.5.2.8-panther-Py2.3.dmg</a> link to begin the download. Again, most Mac OS X browsers will save the file to your desktop.</p> <h2>Downloading PythonCard</h2> <p>The latest version of PythonCard is always available via the <a href="http://sourceforge.net/project/showfiles.php?group_id=19015">PythonCard download page</a>. Click on this <a href="http://prdownloads.sourceforge.net/pythoncard/PythonCard-0.8.1.tar.gz">PythonCard-0.8.1.tar.gz</a> link to begin the download. Again, most Mac OS X browsers will save the file to your desktop.</p> <h2>Installing MacPython add-ons</h2> <p>The MacPython add-ons arrive at your system as an installable disk image. All you have to do is double-click on the file you downloaded (it's called MacPython-Panther-2.3-2.dmg), then double-click the MacPython-Panther.pkg icon and follow the instructions in the installation wizard. The installer will create a MacPython-2.3 directory in your Applications folder.</p> <h2>Installing wxPython</h2> <p>wxPython also comes as an installable disk image. Just double-click on the file you downloaded (it's called wxPythonOSX-2.5.2.8-panther-Py2.3.dmg), then double-click the wxPythonOSX-panther.pkg icon and follow the instructions. wxPython will be installed into <span class="code">/Library/Python/2.3/</span>. Note that this is the same directory as <span class="code">/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/</span> since the two directories are connected by a symbolic link in the file system.</p> <p>I recommend creating a wxPython folder in your Applications folder and copying the Apps, Docs, Samples, and README 1st.txt files to the wxPython folder.</p> <h2>Installing PythonCard</h2> <p>The PythonCard-0.8.1.tar.gz file you downloaded should automatically be decompressed by Stuffit; if the file isn't already decompressed, then double-click the PythonCard-0.8.1.tar.gz file. You should now have a PythonCard-0.8 directory on your desktop. Open the Terminal application and do a cd to that directory and then run the setup.py script using the 2.3 Python you just installed. The sudo command will prompt you for your password.</p> <p class="code"> [mymachine:~] bob% cd ~/Desktop/PythonCard-0.8<br /> [mymachine:~/Desktop/PythonCard-0.8] bob% sudo python setup.py install</p> <p>By default, the PythonCard framework will be installed into <span class="code">/Library/Python/2.3/PythonCard/</span>. You'll probably want to make an alias to this directory to keep on your desktop or home folder to make it easier to get to the PythonCard tools and samples.</p> <h2>Confirming Installation</h2> <p>To run GUI scripts on Mac OS X (i.e. wxPython and PythonCard scripts) from the Terminal you must start them with pythonw rather than the plain python interpreter.</p> <h3>Configuring PythonLauncher</h3> <p>The default install leaves .py and .pyw files associated with the Python IDE rather than PythonLauncher which is the app used to run Python scripts from the Finder. PythonLauncher is located in your Applications/MacPython-2.3 folder</p> <p>If you select a .py file you can choose Get Info from the File menu and then change the files to open with PythonLauncher instead of the IDE if you want to be able to double-click a file and have it run. Repeat the process for .pyw files. Alternatively, you can hold down the control key and when you click on a .py file then you can select PythonLauncher from the Open With menu item.</p> <p class="imageCaption"><img src="http://pythoncard.sourceforge.net/images/pythonlauncher.png" alt="Mac Preferences Dialog" /><br /> Figure 1. PythonLauncher Preferences</p> <h3>Acid Test</h3> <p>OK, now comes the acid test. Open the folder called "minimal" in <span class="code">/Library/Python/2.3/PythonCard/samples</span>. Find the icon labeled minimal.py and double-click it. In a few moments (after an operating system console window has appeared), a small window like the one shown in Figure 2 will appear. This indicates that your installation was successful and everything is working. Close the minimal application in the usual way and proceed with the Walk-Through.</p> <p class="imageCaption"><img src="http://pythoncard.sourceforge.net/images/minimal_panther.png" alt="Minimal Sample" /><br /> Figure 2. PythonCard minimal application window open to confirm installation is correct</p> <p>If for some reason this test fails, go back over these instructions carefully. In particular, make sure that wxPython and PythonCard both appear in the site-packages folder in Python's Lib folder.</p> <p>If everything seems OK and you still can't get minimal.py to launch, post a message to the PythonCard Users Mailing List. (If you aren't yet a member, visit the <a href="http://lists.sourceforge.net/lists/listinfo/pythoncard-users">list management page</a> and join.)</p> <p><a href="walkthrough1.html">Back to Walk-Through</a></p> <?php include "footer.php" ?> <p>$Revision: 1.1 $ : $Author: kasplat $ : Last updated $Date: 2005/12/27 19:46:55 $</p> </div> <!-- end of content --> </body> </html> |
From: Kevin A. <ka...@us...> - 2005-12-27 18:51:06
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16809 Modified Files: walkthrough1.html Log Message: typo Index: walkthrough1.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough1.html,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** walkthrough1.html 27 Dec 2005 18:48:28 -0000 1.20 --- walkthrough1.html 27 Dec 2005 18:50:53 -0000 1.21 *************** *** 39,43 **** match the directory structure and other differences on your machine.</p> <p>You will also have to have access to a <a href="http://www.python.org/editors/">Python-aware editor</a>. ! The good news is that PythonCard comes with a robust editor called <a href="tools/codeEditor">codeEditor</a>. When you install PythonCard, codeEditor appears in the tools sub-directory. We recommend that you make it easy to open your Python source files (all of --- 39,43 ---- match the directory structure and other differences on your machine.</p> <p>You will also have to have access to a <a href="http://www.python.org/editors/">Python-aware editor</a>. ! The good news is that PythonCard comes with a robust editor called <a href="tools/codeEditor.html">codeEditor</a>. When you install PythonCard, codeEditor appears in the tools sub-directory. We recommend that you make it easy to open your Python source files (all of |
From: Kevin A. <ka...@us...> - 2005-12-27 18:48:37
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16460 Modified Files: walkthrough1.html Log Message: fixed comment about Mac Index: walkthrough1.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough1.html,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** walkthrough1.html 25 Dec 2005 12:33:32 -0000 1.19 --- walkthrough1.html 27 Dec 2005 18:48:28 -0000 1.20 *************** *** 36,48 **** <h2>Some Basic Preparation</h2> <p>This document assumes you are running PythonCard on a Windows machine. If ! you're on a Linux system, you'll have to adjust some of the instructions to ! match the directory structure and other differences on your machine. At this ! writing, PythonCard does not yet run on a Macintosh because it relies on the ! wxWindows cross-platform GUI library, which is in the process of being ported ! to the Mac. When that port is complete and we've moved PythonCard to the Mac, ! we'll undoubtedly add appropriate instructions to this and other tutorial ! documents.</p> <p>You will also have to have access to a <a href="http://www.python.org/editors/">Python-aware editor</a>. ! The good news is that PythonCard comes with a robust editor called codeEditor. When you install PythonCard, codeEditor appears in the tools sub-directory. We recommend that you make it easy to open your Python source files (all of --- 36,43 ---- <h2>Some Basic Preparation</h2> <p>This document assumes you are running PythonCard on a Windows machine. If ! you're on a Macintosh or Linux system, you'll have to adjust some of the instructions to ! match the directory structure and other differences on your machine.</p> <p>You will also have to have access to a <a href="http://www.python.org/editors/">Python-aware editor</a>. ! The good news is that PythonCard comes with a robust editor called <a href="tools/codeEditor">codeEditor</a>. When you install PythonCard, codeEditor appears in the tools sub-directory. We recommend that you make it easy to open your Python source files (all of |
From: Kevin A. <ka...@us...> - 2005-12-27 04:20:00
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8089 Modified Files: LICENSE.txt Log Message: moved Alex, "promoted" to developer, etc. Index: LICENSE.txt =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/LICENSE.txt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** LICENSE.txt 27 Oct 2005 12:16:02 -0000 1.5 --- LICENSE.txt 27 Dec 2005 04:19:51 -0000 1.6 *************** *** 23,26 **** --- 23,27 ---- Robin Dunn - developer, wxPython, <ro...@al...> Andy Todd - developer, dbBrowser sample, gadflyDatabase.py, documentation, <an...@ha...> + Alex Tweedly - developer, codeEditor & resourceEditor additions, documentation Arlo Belshee - developer, lsystem sample Kim Wallmark - developer, lsystem sample *************** *** 46,48 **** Stephen Waterbury - twistedEchoClient sample Ward Cunningham - lsystem sample - Alex Tweedly - resourceEditor additions --- 47,48 ---- |
From: Kevin A. <ka...@us...> - 2005-12-27 03:51:41
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3836 Modified Files: documentation.html Log Message: added Andy's paper Index: documentation.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/documentation.html,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** documentation.html 25 Aug 2004 18:48:51 -0000 1.23 --- documentation.html 27 Dec 2005 03:51:32 -0000 1.24 *************** *** 28,31 **** --- 28,33 ---- <h2><a name="getting_started"></a>Getting Started</h2> <ul> + <li><a href="http://www.halfcooked.com/presentations/osdc/pythoncard.html">Building GUI Applications with PythonCard</a> by Andy Todd<br /> + includes an overview and history of the PythonCard project</li> <li><a href="walkthrough1.html">Getting Started in PythonCard</a> by Dan Shafer</li> <li><a href="walkthrough2.html">Creating a Complete PythonCard Application from Scratch</a> by Dan Shafer</li> |
From: Kevin A. <ka...@us...> - 2005-12-27 02:38:17
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27841 Modified Files: shell.html Log Message: updated for 0.8.1 Index: shell.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/shell.html,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** shell.html 26 Jul 2004 15:35:31 -0000 1.5 --- shell.html 27 Dec 2005 02:38:07 -0000 1.6 *************** *** 13,30 **** <div id="content"> <h2>Using the Shell in PythonCard</h2> - <p><strong>Version 1.2 of August 2, 2002</strong></p> <p>PythonCard integrates a rich, high-level interactive Python shell. This document describes how to launch and use this shell as you create PythonCard ! applications. It is based on Version 0.6.5 of PythonCard.</p> ! <p>The shell is based on the <a href="http://sourceforge.net/projects/pycrust"> ! PyCrust</a> ! package created by Patrick O'Brien of Orbtech. The release of PyCrust ! included with wxPython 2.3.2.1 is version 0.7. This document is based on ! version 0.7.2 of PyCrust in cvs which you can get from SourceForge. This ! newer version of PyCrust will be included with wxPython 2.3.3, expected out ! sometime in May. There may be some features or key bindings described below ! that are not available if you don't have the cvs version of PyCrust.</p> <h3>Overview of Basic Shell Functionality</h3> ! <p>In many ways, the PythonCard shell resembles IDLE, the Python editor that is included in Python distributions. IDLE is Python's default editor. But the PythonCard shell is more extensive and more robust both in its --- 13,23 ---- <div id="content"> <h2>Using the Shell in PythonCard</h2> <p>PythonCard integrates a rich, high-level interactive Python shell. This document describes how to launch and use this shell as you create PythonCard ! applications. It is based on Version 0.8.1 of PythonCard.</p> ! <p>The PythonCard shell utilizes the PyCrust ! package created by Patrick O'Brien of Orbtech which is included with wxPython. <h3>Overview of Basic Shell Functionality</h3> ! <p>In many ways, the PythonCard shell resembles the shell in IDLE, the Python editor that is included in Python distributions. IDLE is Python's default editor. But the PythonCard shell is more extensive and more robust both in its *************** *** 37,42 **** Figure 1. Using PythonCard Shell as Interactive Programming Environment</p> <p>Figure 1 also illustrates the shell's inclusion of syntax highlighting and ! coloring. In its current release, it does not support customization of these ! color highlights.</p> <p>Pressing Enter anywhere on a line in the shell always processes the command on that line if that line is the last one in the current editing window. --- 30,34 ---- Figure 1. Using PythonCard Shell as Interactive Programming Environment</p> <p>Figure 1 also illustrates the shell's inclusion of syntax highlighting and ! coloring, which can be customized via the <a href="tools/codeEditor.html">codeEditor</a> Styles dialog.</p> <p>Pressing Enter anywhere on a line in the shell always processes the command on that line if that line is the last one in the current editing window. *************** *** 61,76 **** Figure 3. Result of Typing "shell.help()" in PythonCard Shell</p> <p>The arrow keys navigate up, down, left and right in text displayed in the ! shell, as you'd expect. Holding down the Alt key with the right or left arrow moves the cursor by the rough equivalent of a "word" in the direction of the arrow, with movement continuing across line boundaries.</p> ! <p>By default, lines typed into the shell do not wrap. If you wish to see the lines in your shell window wrap at the right border of the shell window, ! type in the shell: shell.SetWrapMode(1). To turn it back off, type ! shell.SetWrapMode(0).</p> <h3>Key Bindings in the Shell</h3> <p>Table 1 shows all of the key bindings defined in the PythonCard shell and describes their usage.</p> <p class="imageCaption">Table 1. Key Bindings in PythonCard Shell</p> ! <table cellpadding="2" cellspacing="2" border="1" width="75%"> <tr> <th>Key Combination</th> --- 53,68 ---- Figure 3. Result of Typing "shell.help()" in PythonCard Shell</p> <p>The arrow keys navigate up, down, left and right in text displayed in the ! shell, as you'd expect. Holding down the Ctrl key with the right or left arrow moves the cursor by the rough equivalent of a "word" in the direction of the arrow, with movement continuing across line boundaries.</p> ! <p>By default, lines typed into the shell wrap. If you don't wish to see the lines in your shell window wrap at the right border of the shell window, ! type in the shell: shell.SetWrapMode(0). To turn it back on, type ! shell.SetWrapMode(1).</p> <h3>Key Bindings in the Shell</h3> <p>Table 1 shows all of the key bindings defined in the PythonCard shell and describes their usage.</p> <p class="imageCaption">Table 1. Key Bindings in PythonCard Shell</p> ! <table cellpadding="2" cellspacing="2" border="1" width="95%"> <tr> <th>Key Combination</th> *************** *** 86,107 **** </tr> <tr> - <td>End</td> - <td>Go to the end of the line</td> - </tr> - <tr> <td>Shift + End</td> <td>Select from the current cursor position to the end of the line</td> </tr> <tr> ! <td>Alt + Right Arrow</td> <td>Move cursor to the right roughly by a word</td> </tr> <tr> ! <td>Alt + Left Arrow</td> <td>Move cursor to the left roughly by a word</td> </tr> <tr> <td>Ctrl + C</td> ! <td>Copy the selection to the clipboard</td> </tr> <tr> --- 78,99 ---- </tr> <tr> <td>Shift + End</td> <td>Select from the current cursor position to the end of the line</td> </tr> <tr> ! <td>End</td> ! <td>Go to the end of the line</td> ! </tr> ! <tr> ! <td>Ctrl + Right Arrow</td> <td>Move cursor to the right roughly by a word</td> </tr> <tr> ! <td>Ctrl + Left Arrow</td> <td>Move cursor to the left roughly by a word</td> </tr> <tr> <td>Ctrl + C</td> ! <td>Copy the selection to the clipboard, removing prompts, if any</td> </tr> <tr> *************** *** 119,127 **** <tr> <td>Ctrl + Shift + V</td> ! <td>Paste the current multi-line clipboard contents at the cursor location</td> ! </tr> ! <tr> ! <td>Ctrl + Up Arrow</td> ! <td>Retrieve most recent History item</td> </tr> <tr> --- 111,115 ---- <tr> <td>Ctrl + Shift + V</td> ! <td>Paste and <strong>run</strong> the current multi-line clipboard contents</td> </tr> <tr> *************** *** 130,151 **** </tr> <tr> <td>Alt + P</td> ! <td>Retrieve most recent History item</td> </tr> <tr> <td>Ctrl + Down Arrow</td> ! <td>Retrieve next History item in the queue</td> </tr> <tr> <td>Alt + N</td> ! <td>Retrieve next History item in the queue</td> </tr> <tr> <td>Shift + Up Arrow</td> ! <td>Retrieve previous History item</td> </tr> <tr> <td>Shift + Down Arrow</td> ! <td>Retrieve next History item in the queue</td> </tr> <tr> --- 118,143 ---- </tr> <tr> + <td>Ctrl + Up Arrow</td> + <td>Retrieve previous History item</td> + </tr> + <tr> <td>Alt + P</td> ! <td>Retrieve previous History item</td> </tr> <tr> <td>Ctrl + Down Arrow</td> ! <td>Retrieve next History item</td> </tr> <tr> <td>Alt + N</td> ! <td>Retrieve next History item</td> </tr> <tr> <td>Shift + Up Arrow</td> ! <td>Insert previous History item at cursor position</td> </tr> <tr> <td>Shift + Down Arrow</td> ! <td>Insert next History item at cursor position</td> </tr> <tr> *************** *** 153,156 **** --- 145,160 ---- <td>Retrieve a specific History item by typing its first few characters and then pressing F8</td> </tr> + <tr> + <td>Ctrl+]</td> + <td>Increase font size</td> + </tr> + <tr> + <td>Ctrl+[</td> + <td>Decrease font size</td> + </tr> + <tr> + <td>Ctrl+=</td> + <td>Default font size</td> + </tr> </table> <h3>Auto-Completion in the Shell</h3> *************** *** 180,185 **** <p>You can turn this auto-completion feature on and off by typing appropriate commands in the shell. To turn the feature on, type in the shell:</p> ! <p class="code">shell.autoComplete = 1</p> ! <p>To turn the feature off, substitute a zero in the above command.</p> <p>Special Python attributes are prefixed with underscore characters. Some of these attributes use only a single underscore while others use two. You --- 184,189 ---- <p>You can turn this auto-completion feature on and off by typing appropriate commands in the shell. To turn the feature on, type in the shell:</p> ! <p class="code">shell.autoComplete = True</p> ! <p>To turn the feature off, substitute a False for True in the above command.</p> <p>Special Python attributes are prefixed with underscore characters. Some of these attributes use only a single underscore while others use two. You *************** *** 189,203 **** example, to exclude attributes preceded by single underscores from the list, type:</p> ! <p class="code">shell.autoCompleteIncludeSingle = 0</p> ! <p>Similarly, setting autoCompleteIncludeSingle to a value of 1 will include those attributes. The same is true for the autoCompleteIncludeDouble ! setting.</p> <p>Python objects include another type of attribute, often referred to as "magic attributes." These attributes' values can only be obtained by calling the object's _getAttributeNames() method, if it has one. You can determine whether these attributes are included in the auto-completion popup ! by setting the variable autoCompleteIncludeMagic to 1 to include them, 0 to exclude them:</p> ! <p class="code">shell.autoCompleteIncludeMagic = 1</p> <h3>Documentation Auto-Display in the Shell</h3> <p>Similarly to the auto-completion popup described in the preceding section, --- 193,222 ---- example, to exclude attributes preceded by single underscores from the list, type:</p> ! <p class="code">shell.autoCompleteIncludeSingle = False</p> ! <p>Similarly, setting autoCompleteIncludeSingle to a value of True will include those attributes. The same is true for the autoCompleteIncludeDouble ! setting. If you want to see all of the underlying wxPython methods for a ! component, background, etc. then type: ! <p class="code">shell.autoCompleteWxMethods = True</p> ! <p>The defaults for these attributes are defined in your pycrustrc.py along ! with the commands that are automatically run when your <a href="shell.html">shell</a> ! first starts up. They are defined as:</p> ! <pre> ! shell.autoCompleteIncludeMagic = True ! shell.autoCompleteIncludeSingle = False ! shell.autoCompleteIncludeDouble = False ! shell.autoCompleteWxMethods = False ! </pre> ! <!-- ! the following section should probably be removed since it refers to ! a feature in PythonCard prior to using Python properties ! --> <p>Python objects include another type of attribute, often referred to as "magic attributes." These attributes' values can only be obtained by calling the object's _getAttributeNames() method, if it has one. You can determine whether these attributes are included in the auto-completion popup ! by setting the variable autoCompleteIncludeMagic to True to include them, False to exclude them:</p> ! <p class="code">shell.autoCompleteIncludeMagic = True</p> <h3>Documentation Auto-Display in the Shell</h3> <p>Similarly to the auto-completion popup described in the preceding section, |
From: Kevin A. <ka...@us...> - 2005-12-27 02:04:10
|
Update of /cvsroot/pythoncard/PythonCard/docs/html/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23499 Modified Files: shellfig3.png Log Message: updated image Index: shellfig3.png =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/images/shellfig3.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsdaAbDs and /tmp/cvsmrm8mO differ |
From: Alex T. <ale...@us...> - 2005-12-26 19:08:15
|
Update of /cvsroot/pythoncard/PythonCard/samples/helpfulWrappers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21625/samples/helpfulWrappers Modified Files: helpfulWrappers.py Log Message: Fixed typos. Improved tooltip help for the sample. Index: helpfulWrappers.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/samples/helpfulWrappers/helpfulWrappers.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** helpfulWrappers.py 2 Nov 2005 11:17:46 -0000 1.2 --- helpfulWrappers.py 26 Dec 2005 19:08:03 -0000 1.3 *************** *** 22,26 **** 'position':(100,10), 'label':'Test pop-ups!', ! 'toolTip':'try this', }, --- 22,26 ---- 'position':(100,10), 'label':'Test pop-ups!', ! 'toolTip':'try this - context-click and the pop-up will appear', }, |
From: Alex T. <ale...@us...> - 2005-12-26 19:08:11
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21625 Modified Files: helpful.py Log Message: Fixed typos. Improved tooltip help for the sample. Index: helpful.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/helpful.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** helpful.py 2 Nov 2005 11:25:56 -0000 1.3 --- helpful.py 26 Dec 2005 19:08:03 -0000 1.4 *************** *** 13,18 **** ! # AGT This could probably be generalized some more - butit handles the current needs ! # within this wrapper collection of cloning buttons and checkboxes. # utility functions to manipulate controls at run time class copyControl: --- 13,19 ---- ! # AGT This could probably be generalized some more - but it handles current ! # needs within this wrapper collection of cloning buttons and checkboxes. ! # utility functions to manipulate controls at run time class copyControl: *************** *** 131,136 **** class MultiCheckBoxDialog(model.CustomDialog): ! # boxes is a list of (name, value) paris, not a dictionary ! # because a dictionary didn't allow th ecaller to control the order of presentatino def __init__(self, parent, boxes, rsrc): model.CustomDialog.__init__(self, parent, rsrc) --- 132,137 ---- class MultiCheckBoxDialog(model.CustomDialog): ! # boxes is a list of (name, value) pairs, not a dictionary ! # because a dictionary didn't allow the caller to control the order of presentation def __init__(self, parent, boxes, rsrc): model.CustomDialog.__init__(self, parent, rsrc) |
From: Alex T. <ale...@us...> - 2005-12-26 19:04:04
|
Update of /cvsroot/pythoncard/PythonCard/docs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20156 Modified Files: changelog.txt Log Message: Updated for assorted additions made over last few months. Index: changelog.txt =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/changelog.txt,v retrieving revision 1.320 retrieving revision 1.321 diff -C2 -d -r1.320 -r1.321 *** changelog.txt 25 Dec 2005 13:53:15 -0000 1.320 --- changelog.txt 26 Dec 2005 19:03:53 -0000 1.321 *************** *** 14,17 **** --- 14,23 ---- updated turtle.py and bitmapcanvas.py component to force update on Mac renamed samples.py to samples.pyw + added work-in-progress version of multiresourceEditor + (tools/resourceEditor/multirwesourceEditor) + support customizable window styles in backgroundInfo of resourceEditor + added convenience wrappers for pop-up menus, multiple check-box dialogs, + multiple button dialogs (helpful.py and samples/helpfulWrappers) + added sample for sudoku solver/helper (samples/sudoku) |
From: Kevin A. <ka...@us...> - 2005-12-26 08:53:55
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21263 Modified Files: walkthrough3.html Log Message: fixed indent Index: walkthrough3.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough3.html,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** walkthrough3.html 25 Dec 2005 12:56:23 -0000 1.9 --- walkthrough3.html 26 Dec 2005 08:53:46 -0000 1.10 *************** *** 242,246 **** the parent. The code would look something like this:</p> <pre> ! self.parent.menuBar.setChecked('menuViewMinimalWindow', False) </pre> <?php include "footer.php" ?> --- 242,246 ---- the parent. The code would look something like this:</p> <pre> ! self.parent.menuBar.setChecked('menuViewMinimalWindow', False) </pre> <?php include "footer.php" ?> |
From: Alex T. <ale...@us...> - 2005-12-26 01:22:06
|
Update of /cvsroot/pythoncard/PythonCard/tools/resourceEditor In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30658/resourceEditor Modified Files: multiresourceEditor.py Log Message: Keep in step with changes made to basic resourceEditor. Index: multiresourceEditor.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/resourceEditor/multiresourceEditor.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** multiresourceEditor.py 24 Aug 2005 13:57:27 -0000 1.5 --- multiresourceEditor.py 26 Dec 2005 01:21:56 -0000 1.6 *************** *** 1435,1440 **** def fixComponentOrder(self, name): ! for c in self.components.order: ! self.components[c].Lower() if self.application.pw is not None: --- 1435,1445 ---- def fixComponentOrder(self, name): ! # KEA 2005-12-23 ! # Lower() doesn't appear to always work correctly, ! # so use Raise instead with a reversed list ! r = self.components.order[:] ! r.reverse() ! for c in r: ! self.components[c].Raise() if self.application.pw is not None: |
From: Kevin A. <ka...@us...> - 2005-12-25 17:12:04
|
Update of /cvsroot/pythoncard/PythonCard/samples/testevents In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18710/samples/testevents Modified Files: testevents.py Log Message: fixed on_openChildWindow_command by passing path to childWindow Index: testevents.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/samples/testevents/testevents.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** testevents.py 27 Sep 2004 16:55:49 -0000 1.21 --- testevents.py 25 Dec 2005 17:11:55 -0000 1.22 *************** *** 162,166 **** # in child function 10 ms in future print "openChildWindow command", event.target.name ! win = model.childWindow(self, MinimalChild) wx.FutureCall(10, win.callableFunction, "10 ms in the Future") wx.CallAfter(win.callableFunction, "via CallAfter") --- 162,176 ---- # in child function 10 ms in future print "openChildWindow command", event.target.name ! # KEA 2005-12-25 ! # the path for sys.modules[MinimalChild.__module__].__file__ ! # will be relative to the starting directory ! # so childWindow will fail if a resource file isn't provided ! # I'm not sure if this is a bug due to PythonCard changing the ! # directory to the application directory on startup or ! # the __file__ attribute already being set prior to our sys.path[0] ! # fix in model.py a combination of the two or something else. ! # However, always providing a resource path seems to work for ! # childWindow. ! win = model.childWindow(self, MinimalChild, 'testevents.rsrc.py') wx.FutureCall(10, win.callableFunction, "10 ms in the Future") wx.CallAfter(win.callableFunction, "via CallAfter") |
From: Kevin A. <ka...@us...> - 2005-12-25 16:40:18
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14333 Modified Files: debug.py Log Message: changed unused messages to be denoted as # comment lines in the Message Watcher Index: debug.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/debug.py,v retrieving revision 1.134 retrieving revision 1.135 diff -C2 -d -r1.134 -r1.135 *** debug.py 3 Oct 2004 19:21:33 -0000 1.134 --- debug.py 25 Dec 2005 16:40:08 -0000 1.135 *************** *** 87,91 **** sizer2.Add(self.hideTimers, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 5) sizer2.Add((5, 5), 1) # spacer ! self.hideUnused = wx.CheckBox(panel, -1, 'Hide unused', wx.DefaultPosition, wx.DefaultSize, wx.NO_BORDER) --- 87,91 ---- sizer2.Add(self.hideTimers, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 5) sizer2.Add((5, 5), 1) # spacer ! self.hideUnused = wx.CheckBox(panel, -1, 'Hide unused (#)', wx.DefaultPosition, wx.DefaultSize, wx.NO_BORDER) *************** *** 108,111 **** --- 108,116 ---- else: self.msgHistory.StyleSetSize(stc.STC_STYLE_DEFAULT, wx.NORMAL_FONT.GetPointSize()) + # KEA 2005-12-25 + # change the lexer to Python + # and denote unused messages as comments (e.g. #mouseUp + self.msgHistory.StyleSetSpec(stc.STC_P_COMMENTLINE, "fore:#7F7F7F") + self.msgHistory.SetLexer(stc.STC_LEX_PYTHON) self.msgHistory.SetUseHorizontalScrollBar(0) self.msgHistory.SetMarginWidth(1,0) *************** *** 134,138 **** eventText = eventName + ' : ' + sourceName else: ! eventText = '(' + eventName + ' : ' + sourceName + ')' # show timer events? --- 139,143 ---- eventText = eventName + ' : ' + sourceName else: ! eventText = '# ' + eventName + ' : ' + sourceName # show timer events? |
From: Kevin A. <ka...@us...> - 2005-12-25 14:53:36
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1896 Modified Files: install-pythoncard.py Log Message: added tabCodeEditor.py to shortcuts (Tabbed Code Editor) maybe there is a better name for this editor? Index: install-pythoncard.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/install-pythoncard.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** install-pythoncard.py 28 Mar 2005 05:42:40 -0000 1.7 --- install-pythoncard.py 25 Dec 2005 14:53:26 -0000 1.8 *************** *** 77,80 **** --- 77,87 ---- file_created(path) + path = os.path.join(dest_dir, "Tabbed Code Editor.lnk") + arguments = os.path.join(lib_dir, + "PythonCard\\tools\\oneEditor\\tabcodeEditor.py") + + create_shortcut(pythonw, "Tabbed Code Editor", path, arguments) + file_created(path) + path = os.path.join(dest_dir, "Find Files.lnk") |
From: Kevin A. <ka...@us...> - 2005-12-25 14:05:54
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29089 Modified Files: index.html Log Message: using local images for PythonPowered and wxPython logos Index: index.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/index.html,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -d -r1.65 -r1.66 *** index.html 19 Dec 2005 23:02:09 -0000 1.65 --- index.html 25 Dec 2005 14:05:34 -0000 1.66 *************** *** 67,72 **** <p>View the project <a href="documentation.html">documentation</a>.</p> <p> ! <a href="http://www.python.org/"><img src="http://webware.sourceforge.net/PythonPowered.gif" width="110" height="44" alt="Python Powered" /></a> ! <a href="http://www.wxpython.org/"><img src="http://www.wxpython.org/images/wxPyButton.png" alt="wxPython Powered" width="100" height="43" /></a> </p> <?php include "footer.php" ?> --- 67,72 ---- <p>View the project <a href="documentation.html">documentation</a>.</p> <p> ! <a href="http://www.python.org/"><img src="icon/PythonPowered.gif" width="110" height="44" alt="Python Powered" /></a> ! <a href="http://www.wxpython.org/"><img src="icon/wxPyButton.png" alt="wxPython Powered" width="100" height="43" /></a> </p> <?php include "footer.php" ?> |