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
|
Update of /cvsroot/pythoncard/PythonCard/docs/html/icon In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28160 Added Files: PythonPowered.gif Log Message: for docs --- NEW FILE: PythonPowered.gif --- (This appears to be a binary file; contents omitted.)
Update of /cvsroot/pythoncard/PythonCard/docs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26985/docs Modified Files: changelog.txt Log Message: added getTextExtent and getFullTextExtent methods SF Bug #1184884 Index: changelog.txt =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/changelog.txt,v retrieving revision 1.319 retrieving revision 1.320 diff -C2 -d -r1.319 -r1.320 *** changelog.txt 30 Mar 2005 18:07:25 -0000 1.319 --- changelog.txt 25 Dec 2005 13:53:15 -0000 1.320 *************** *** 8,12 **** ! Release 0.8.2 2005-05-?? revised internationalResourceName to support platform-specific resources added UK <-> US to conversions.py and simplified SOAP.py module check --- 8,13 ---- ! Release 0.8.2 2006-01-?? ! added getTextExtent and getFullTextExtent methods to BitmapCanvas revised internationalResourceName to support platform-specific resources added UK <-> US to conversions.py and simplified SOAP.py module check
Update of /cvsroot/pythoncard/PythonCard/components In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26985/components Modified Files: bitmapcanvas.py Log Message: added getTextExtent and getFullTextExtent methods SF Bug #1184884 Index: bitmapcanvas.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/components/bitmapcanvas.py,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** bitmapcanvas.py 28 Mar 2005 05:46:59 -0000 1.46 --- bitmapcanvas.py 25 Dec 2005 13:53:15 -0000 1.47 *************** *** 392,395 **** --- 392,401 ---- return self._bufImage.GetPixelPoint(xy) + def getTextExtent(self, aString): + return self._bufImage.GetTextExtent(aString) + + def getFullTextExtent(self, aString): + return self._bufImage.GetFullTextExtent(aString) + def refresh(self, enableAutoRefresh=False): if enableAutoRefresh:
Update of /cvsroot/pythoncard/PythonCard/components In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26060 Modified Files: list.py Log Message: fixed isSelected SF bug #1202846 Index: list.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/components/list.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** list.py 4 Sep 2004 23:13:39 -0000 1.28 --- list.py 25 Dec 2005 13:44:50 -0000 1.29 *************** *** 122,131 **** # KEA was getSelected ! def isSelected( self, aPosition ) : """Determines whether an item is selected. aPosition is the zero-based item index ! Returns 1 if the given item is selected, 0 otherwise. """ ! return self.Selected( ) def setString( self, n, aString ) : --- 122,131 ---- # KEA was getSelected ! def isSelected(self, aPosition): """Determines whether an item is selected. aPosition is the zero-based item index ! Returns True if the given item is selected, False otherwise. """ ! return self.IsSelected(aPosition) def setString( self, n, aString ) :
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19091 Modified Files: walkthrough3.html Log Message: changed code blocks to use <pre> Index: walkthrough3.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough3.html,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** walkthrough3.html 18 Sep 2004 16:55:59 -0000 1.8 --- walkthrough3.html 25 Dec 2005 12:56:23 -0000 1.9 *************** *** 49,53 **** <h2>model.Background</h2> <p>This is the standard class definition for a PythonCard app:</p> ! <p class="code"> class Minimal(model.Background):</p> <p>One of the most important concepts when dealing with child windows in PythonCard is the background. The background is unique to PythonCard and it --- 49,55 ---- <h2>model.Background</h2> <p>This is the standard class definition for a PythonCard app:</p> ! <pre> ! class Minimal(model.Background): ! </pre> <p>One of the most important concepts when dealing with child windows in PythonCard is the background. The background is unique to PythonCard and it *************** *** 110,115 **** current background.</p> <p>In addition to the standard imports for Counter, we'll import minimal:</p> ! <p class="code">from PythonCard import model<br /> ! import minimal</p> <p>Next we'll add an event handler to be executed when the Counter application is started. This handler acts something like autoexec.bat on a PC or .login --- 112,119 ---- current background.</p> <p>In addition to the standard imports for Counter, we'll import minimal:</p> ! <pre> ! from PythonCard import model ! import minimal ! </pre> <p>Next we'll add an event handler to be executed when the Counter application is started. This handler acts something like autoexec.bat on a PC or .login *************** *** 119,126 **** applications.) Here is the class declaration of our Counter application with on_initialize added:</p> ! <p class="code">class Counter(model.Background):<br /> ! def on_initialize(self, event):</p> <p>and here is the code that we will add to the on_initialize method:</p> ! <p class="code"> self.minimalWindow = model.childWindow(self, minimal.Minimal)</p> <p>We create a minimal window object uisng the <span class="code">childWindow </span> function and give it the name minimalWindow by passing two parameters --- 123,134 ---- applications.) Here is the class declaration of our Counter application with on_initialize added:</p> ! <pre> ! class Counter(model.Background): ! def on_initialize(self, event): ! </pre> <p>and here is the code that we will add to the on_initialize method:</p> ! <pre> ! self.minimalWindow = model.childWindow(self, minimal.Minimal) ! </pre> <p>We create a minimal window object uisng the <span class="code">childWindow </span> function and give it the name minimalWindow by passing two parameters *************** *** 132,139 **** <p>Continuing in the on_initialize handler, we make calls to set the position and visibility of the new window:</p> ! <p class="code"> ! # override resource position<br /> ! self.minimalWindow.position = (200, 5)<br /> ! self.minimalWindow.visible = True</p> <p>We now have a window that is an attribute of our main background, just like any of the menus or buttons that are already a part of Counter.</p> --- 140,148 ---- <p>Continuing in the on_initialize handler, we make calls to set the position and visibility of the new window:</p> ! <pre> ! # override resource position ! self.minimalWindow.position = (200, 5) ! self.minimalWindow.visible = True ! </pre> <p>We now have a window that is an attribute of our main background, just like any of the menus or buttons that are already a part of Counter.</p> *************** *** 143,158 **** window minimalWindow, we simply add one more call to update the control in that window as well (the new lines are in bold type):</p> ! <p class="code"> ! def on_incrBtn_mouseClick(self, event):<br /> ! startValue = int(self.components.field1.text)<br /> ! endValue = startValue + 1<br /> ! self.components.field1.text = str(endValue)<br /> ! <strong>self.minimalWindow.components.field1.text = str(endValue)</strong><br /> ! <br /> ! def on_decrBtn_mouseClick(self, event):<br /> ! startValue = int(self.components.field1.text)<br /> ! endValue = startValue - 1<br /> ! self.components.field1.text = str(endValue)<br /> ! <strong>self.minimalWindow.components.field1.text = str(endValue)</strong></p> <p>Notice that we reference components in the child window by a collection of objects starting with the main application (self) and then pointing first to --- 152,168 ---- window minimalWindow, we simply add one more call to update the control in that window as well (the new lines are in bold type):</p> ! <pre> ! def on_incrBtn_mouseClick(self, event): ! startValue = int(self.components.field1.text) ! endValue = startValue + 1 ! self.components.field1.text = str(endValue) ! <strong>self.minimalWindow.components.field1.text = str(endValue)</strong> ! ! def on_decrBtn_mouseClick(self, event): ! startValue = int(self.components.field1.text) ! endValue = startValue - 1 ! self.components.field1.text = str(endValue) ! <strong>self.minimalWindow.components.field1.text = str(endValue)</strong> ! </pre> <p>Notice that we reference components in the child window by a collection of objects starting with the main application (self) and then pointing first to *************** *** 174,183 **** added to the minimal application above. Add the following code to minimal.py</p> ! <p class="code"> ! def on_initialize(self, event):<br /> ! self.parent = self.getParent()<br /> ! <br /> ! def on_btnReset_mouseClick(self, event): ! self.parent.components.field1.text = "0"</p> <p>When our child window it initialized, it calls getParent() to get a reference to its parent window, and then stores that reference. We place the --- 184,194 ---- added to the minimal application above. Add the following code to minimal.py</p> ! <pre> ! def on_initialize(self, event): ! self.parent = self.getParent() ! ! def on_btnReset_mouseClick(self, event): ! self.parent.components.field1.text = "0" ! </pre> <p>When our child window it initialized, it calls getParent() to get a reference to its parent window, and then stores that reference. We place the *************** *** 208,221 **** function that sets the counter's field1 to an arbitrary value just to confirm the connection between the two windows visibly:</p> ! <p class="code"> ! def doExit(self):<br /> ! self.parent.components.field1.text = "99"<br /> ! <br /> ! def on_close(self, event):<br /> ! self.doExit()<br /> ! self.visible = False<br /> ! <br /> ! def on_menuFileExit_select(self, event):<br /> ! self.close() </p> <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 --- 219,233 ---- function that sets the counter's field1 to an arbitrary value just to confirm the connection between the two windows visibly:</p> ! <pre> ! def doExit(self): ! self.parent.components.field1.text = "99" ! ! def on_close(self, event): ! self.doExit() ! 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 *************** *** 223,227 **** is called. We placed the work to be done when the document is closing in the doExit method. In this case it just sets the counter field in the parent to ! "99".</p> <p>In addition, in doExit() you could modify some properties of the parent window to keep track of the state of your child window. For example, assuming --- 235,239 ---- is called. We placed the work to be done when the document is closing in the doExit method. In this case it just sets the counter field in the parent to ! "99".</p> <p>In addition, in doExit() you could modify some properties of the parent window to keep track of the state of your child window. For example, assuming *************** *** 229,234 **** could use doExit() to check or uncheck the 'View Minimal Window' menu item on the parent. The code would look something like this:</p> ! <p class="code"> ! self.parent.menuBar.setChecked('menuViewMinimalWindow', False)</p> <?php include "footer.php" ?> <p>$Revision$ : $Author$ : Last update $Date$</p> --- 241,247 ---- could use doExit() to check or uncheck the 'View Minimal Window' menu item on the parent. The code would look something like this:</p> ! <pre> ! self.parent.menuBar.setChecked('menuViewMinimalWindow', False) ! </pre> <?php include "footer.php" ?> <p>$Revision$ : $Author$ : Last update $Date$</p>
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13474 Modified Files: walkthrough1.html Log Message: changed code blocks to use <pre> Index: walkthrough1.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough1.html,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** walkthrough1.html 21 Aug 2005 18:47:59 -0000 1.18 --- walkthrough1.html 25 Dec 2005 12:33:32 -0000 1.19 *************** *** 68,72 **** <li>In the "Application used to perform action:" field you need to specify the path to the Python executable as well as the location of the ! codeEditor.py file. On a Python 2.3.4 installation using the default installer this will look like:</li> </ol> --- 68,72 ---- <li>In the "Application used to perform action:" field you need to specify the path to the Python executable as well as the location of the ! codeEditor.py file. On a Python 2.3.5 installation using the default installer this will look like:</li> </ol> *************** *** 180,185 **** script is, as you'd expect, brief and to the point. Here's the important part to focus on:</p> ! <p class="code"> def on_menuFileAbout_select(self, event):<br /> ! pass</p> <p>Even without understanding Python you can probably tell what this code snippet does. (That's one of the beauties of Python. It is eminently --- 180,187 ---- script is, as you'd expect, brief and to the point. Here's the important part to focus on:</p> ! <pre> ! def on_menuFileAbout_select(self, event): ! pass ! </pre> <p>Even without understanding Python you can probably tell what this code snippet does. (That's one of the beauties of Python. It is eminently *************** *** 196,201 **** <p>First, select the word "pass". Type in its place the following line:</p> ! <p class="code"> ! result = dialog.alertDialog(self, 'It works!', 'Showing Off')</p> <p>Again, this new line of Python code is readable even if you're not a Python guru yet. Now when the user selects the Exit menu, rather than doing --- 198,204 ---- <p>First, select the word "pass". Type in its place the following line:</p> ! <pre> ! result = dialog.alertDialog(self, 'It works!', 'Showing Off') ! </pre> <p>Again, this new line of Python code is readable even if you're not a Python guru yet. Now when the user selects the Exit menu, rather than doing *************** *** 205,211 **** with dialogs. Near the top of the file above the comments that explain what's going on is a line that says:</p> ! <p class="code">from PythonCard import model</p> <p>Change that so it says:</p> ! <p class="code">from PythonCard import dialog, model</p> <p>Save the code.</p> <p><strong>IT IS IMPORTANT</strong>, if you choose to use a Python editor --- 208,218 ---- with dialogs. Near the top of the file above the comments that explain what's going on is a line that says:</p> ! <pre> ! from PythonCard import model ! </pre> <p>Change that so it says:</p> ! <pre> ! from PythonCard import dialog, model ! </pre> <p>Save the code.</p> <p><strong>IT IS IMPORTANT</strong>, if you choose to use a Python editor *************** *** 223,227 **** open for editing. Replace the string 'It works!' in the line we edited earlier so that the line reads:</p> ! <p class="code"> result = dialog.alertDialog(self, self.components.field1.text, 'Showing Off')</p> <p>This line is almost identical to the one we just had here, but this one takes its text from the text in a component called "field1." That --- 230,236 ---- open for editing. Replace the string 'It works!' in the line we edited earlier so that the line reads:</p> ! <pre> ! result = dialog.alertDialog(self, self.components.field1.text, 'Showing Off') ! </pre> <p>This line is almost identical to the one we just had here, but this one takes its text from the text in a component called "field1." That
Update of /cvsroot/pythoncard/PythonCard/docs/html/framework In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16083 Modified Files: resource_files.html runtime_tools.html Log Message: minor names changes plus date and version updated Index: resource_files.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/framework/resource_files.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** resource_files.html 14 Aug 2004 21:51:40 -0000 1.3 --- resource_files.html 25 Dec 2005 12:13:46 -0000 1.4 *************** *** 12,16 **** <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: April 10, 2004 for release 0.7.3</p> <p>Resource files are an old idea, but they are not widely used in the Python --- 12,16 ---- <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: December 25, 2005 for release 0.8.1</p> <p>Resource files are an old idea, but they are not widely used in the Python *************** *** 63,68 **** <p>The organization of the resource file is defined by the spec classes in ! pom.py spec.py, widget.py, and each component module. When a ! resource is read in (see res.py) it is validated against the specs, default arguments are initialized and any undefined component types in the resource will cause a runtime error. The resource dictionary is converted to an --- 63,68 ---- <p>The organization of the resource file is defined by the spec classes in ! component.py, spec.py, widget.py, and each component module. When a ! resource is read in (see resource.py) it is validated against the specs, default arguments are initialized and any undefined component types in the resource will cause a runtime error. The resource dictionary is converted to an *************** *** 73,77 **** <p>The noresource sample shows an example of a PythonCard application that does not have a resource file. The noresource sample also shows an ! example of dynamic component creation when the app starts up.</p> <hr> | <a href="general_concepts_and_limitations.html">General Concepts and Limitations</a> | <a href="components.html">Components</a> | <a href="dialogs.html">Dialogs</a> | <a href="events_and_handlers.html">Events and Handlers</a> | <a href="menus.html">Menus</a> | <a href="resource_files.html">Resource Files</a> | <a href="runtime_tools.html">Runtime Tools</a> <hr> <?php include "../footer.php" ?> --- 73,77 ---- <p>The noresource sample shows an example of a PythonCard application that does not have a resource file. The noresource sample also shows an ! example of dynamic component creation when the application starts up.</p> <hr> | <a href="general_concepts_and_limitations.html">General Concepts and Limitations</a> | <a href="components.html">Components</a> | <a href="dialogs.html">Dialogs</a> | <a href="events_and_handlers.html">Events and Handlers</a> | <a href="menus.html">Menus</a> | <a href="resource_files.html">Resource Files</a> | <a href="runtime_tools.html">Runtime Tools</a> <hr> <?php include "../footer.php" ?> Index: runtime_tools.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/framework/runtime_tools.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** runtime_tools.html 14 Aug 2004 21:05:15 -0000 1.2 --- runtime_tools.html 25 Dec 2005 12:13:46 -0000 1.3 *************** *** 12,16 **** <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: April 10, 2004 for release 0.7.3</p> <p>PythonCard supports the following runtime tools (command-line switch in --- 12,16 ---- <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: December 25, 2005 for release 0.8.1</p> <p>PythonCard supports the following runtime tools (command-line switch in *************** *** 70,74 **** <pre> ! shell.autoCompleteIncludeMagic = True shell.autoCompleteIncludeSingle = False shell.autoCompleteIncludeDouble = False shell.autoCompleteWxMethods = False import os import sys # workaround for absolute pathnames # in sys.path (see model.py) if sys.path[0] not in ('', '.'): sys.path.insert(0, '') from wxPython import wx from PythonCard import dialog, util bg = pcapp.getCurrentBackground() self = bg comp = bg.components </pre> <p>These commands are in a pycrustrc.py file in the framework directory. You can --- 70,91 ---- <pre> ! shell.autoCompleteIncludeMagic = True ! shell.autoCompleteIncludeSingle = False ! shell.autoCompleteIncludeDouble = False ! shell.autoCompleteWxMethods = False ! ! import os ! import sys ! # workaround for absolute pathnames ! # in sys.path (see model.py) ! if sys.path[0] not in ('', '.'): ! sys.path.insert(0, '') ! ! import wx ! from PythonCard import dialog, util ! bg = pcapp.getCurrentBackground() ! self = bg ! comp = bg.components ! </pre> <p>These commands are in a pycrustrc.py file in the framework directory. You can
Update of /cvsroot/pythoncard/PythonCard/docs/html/framework In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17891 Modified Files: menus.html Log Message: no changes except date and version, this should be expanded sometime Index: menus.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/framework/menus.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** menus.html 14 Aug 2004 21:05:15 -0000 1.2 --- menus.html 25 Dec 2005 08:09:48 -0000 1.3 *************** *** 12,16 **** <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: April 10, 2004 for release 0.7.3</p> <p>The Menu classes are defined in menu.py. Menus for an app are defined in the --- 12,16 ---- <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: December 24, 2005 for release 0.8.1</p> <p>The Menu classes are defined in menu.py. Menus for an app are defined in the
Update of /cvsroot/pythoncard/PythonCard/docs/html/framework In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16215 Modified Files: dialogs.html Log Message: added newer dialogs Index: dialogs.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/framework/dialogs.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** dialogs.html 14 Aug 2004 21:05:15 -0000 1.2 --- dialogs.html 25 Dec 2005 08:02:46 -0000 1.3 *************** *** 12,16 **** <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: April 10, 2004 for release 0.7.3</p> <p>Dialogs are defined in dialog.py. They are all modal and map directly to a --- 12,16 ---- <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: December 24, 2005 for release 0.8.1</p> <p>Dialogs are defined in dialog.py. They are all modal and map directly to a *************** *** 22,36 **** <pre> ! alertDialog (variation of MessageDialog) ! colorDialog (wxColourDialog) ! directoryDialog (wxDirDialog) ! fileDialog (wxFileDialog) findDialog ! fontDialog (wxFontDialog) ! messageDialog (wxMessageDialog) ! multipleChoiceDialog (wxMultipleChoiceDialog) ! scrolledMessageDialog (wxScrolledMessageDialog) ! singleChoiceDialog (wxSingleChoiceDialog) ! textEntryDialog (wxTextEntryDialog) </pre> --- 22,40 ---- <pre> ! alertDialog (variation of wx.MessageDialog) ! colorDialog (wx.ColourDialog) ! directoryDialog (wx.DirDialog) ! fileDialog (wx.FileDialog) ! openFileDialog ! saveFileDialog findDialog ! fontDialog (wx.FontDialog) ! messageDialog (wx.MessageDialog) ! multipleChoiceDialog (wx.lib.dialogs.MultipleChoiceDialog) ! scrolledMessageDialog (wx.lib.dialogs.ScrolledMessageDialog) ! singleChoiceDialog (wx.SingleChoiceDialog) ! textEntryDialog (wx.TextEntryDialog) ! multilineTextEntryDialog ! passwordTextEntryDialog </pre>
Update of /cvsroot/pythoncard/PythonCard/docs/html/framework In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14477 Modified Files: components.html Log Message: added additional components Index: components.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/framework/components.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** components.html 14 Aug 2004 21:05:15 -0000 1.2 --- components.html 25 Dec 2005 07:52:27 -0000 1.3 *************** *** 12,16 **** <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: April 10, 2004 for release 0.7.3</p> <p> --- 12,16 ---- <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: December 24, 2005 for release 0.8.1</p> <p> *************** *** 22,26 **** <p>The following component types are currently supported. The are defined in ! the PythonCardPrototype components directory. The wxPython control they are based on is in parenthesis ():</p> --- 22,26 ---- <p>The following component types are currently supported. The are defined in ! the PythonCard components directory. The wxPython control they are based on is in parenthesis ():</p> *************** *** 28,51 **** <a href="components/BitmapCanvas.html">BitmapCanvas</a> Provides a buffered bitmap. There is no direct equivelant in wxPython. ! <a href="components/Button.html">Button</a> (wxButton) ! <a href="components/Calendar.html">Calendar</a> (wxCalendar) ! <a href="components/CheckBox.html">CheckBox</a> (wxCheckBox) ! <a href="components/Choice.html">Choice</a> (wxChoice) ! CodeEditor (wxStyledTextCtrl) <a href="components/ComboBox.html">ComboBox</a> (wxComboBox) ! <a href="components/Gauge.html">Gauge</a> (wxGauge) ! Grid (wxGrid) <a href="components/HtmlWindow.html">HtmlWindow</a> (wxHtmlWindow) ! IEHtmlWindow (wxIEHtmlWin - Windows-only) <a href="components/Image.html">Image</a> (wxStaticBitmap) ! <a href="components/ImageButton.html">ImageButton</a> (wxBitmapButton) ! <a href="components/List.html">List</a> (wxListBox) ! MultiColumnList (wxListCtrl) <a href="components/PasswordField.html">PasswordField</a> (wxTextCtrl) ! <a href="components/RadioGroup.html">RadioGroup</a> (wxRadioBox) ! <a href="components/Slider.html">Slider</a> (wxSlider) ! <a href="components/Spinner.html">Spinner</a> (wxSpinner) ! <a href="components/StaticBox.html">StaticBox</a> (wxStaticBox) ! <a href="components/StaticLine.html">StaticLine</a> (wxStaticLine) ! <a href="components/StaticText.html">StaticText</a> (wxStaticText) ! <a href="components/TextArea.html">TextArea</a> (wxTextCtrl) ! <a href="components/TextField.html">TextField</a> (wxTextCtrl) ! Tree (wxTreeCtrl) </pre> <p>The following events are automatically bound and available for each component:</p> --- 28,53 ---- <a href="components/BitmapCanvas.html">BitmapCanvas</a> Provides a buffered bitmap. There is no direct equivelant in wxPython. ! <a href="components/Button.html">Button</a> (wx.Button) ! <a href="components/Calendar.html">Calendar</a> (wx.Calendar) ! <a href="components/CheckBox.html">CheckBox</a> (wx.CheckBox) ! <a href="components/Choice.html">Choice</a> (wx.Choice) ! CodeEditor (wx.stc.StyledTextCtrl) <a href="components/ComboBox.html">ComboBox</a> (wx.ComboBox) ! <a href="components/Gauge.html">Gauge</a> (wx.Gauge) ! Grid (wx.Grid) <a href="components/HtmlWindow.html">HtmlWindow</a> (wx.HtmlWindow) ! IEHtmlWindow (wx.lib.iewin.IEHtmlWindow - Windows-only) <a href="components/Image.html">Image</a> (wx.StaticBitmap) ! <a href="components/ImageButton.html">ImageButton</a> (wx.BitmapButton) ! <a href="components/List.html">List</a> (wx.ListBox) ! MultiColumnList (wx.ListCtrl) ! Notebook (wx.Notebook) <a href="components/PasswordField.html">PasswordField</a> (wx.TextCtrl) ! <a href="components/RadioGroup.html">RadioGroup</a> (wx.RadioBox) ! <a href="components/Slider.html">Slider</a> (wx.Slider) ! <a href="components/Spinner.html">Spinner</a> (wx.Spinner) ! <a href="components/StaticBox.html">StaticBox</a> (wx.StaticBox) ! <a href="components/StaticLine.html">StaticLine</a> (wx.StaticLine) ! <a href="components/StaticText.html">StaticText</a> (wx.StaticText) ! <a href="components/TextArea.html">TextArea</a> (wx.TextCtrl) ! <a href="components/TextField.html">TextField</a> (wx.TextCtrl) ! ToggleButton (wx.ToggleButton) ! Tree (wx.TreeCtrl) </pre> <p>The following events are automatically bound and available for each component:</p> *************** *** 115,123 **** <pre> ! Bitmap (wxBitmap) - defined in graphic.py supported formats: ! BMP, GIF, JPG/JPEG, PCX, PNG, PNM, TIF/TIFF, XBM, and XPM ! also supports translation to/from Python Imaging Library (PIL) format ! Font (wxFont) - defined in font.py </pre> --- 117,126 ---- <pre> ! Bitmap (wx.Bitmap) - defined in graphic.py supported formats: ! BMP, GIF, JPEG, PCX, PICT, PNG, PNM, TIFF, XBM, and XPM ! also supports translation to/from Python Imaging Library (PIL) format, ! and NumPy arrays to bitmap. ! Font (wx.Font) - defined in font.py </pre>
Update of /cvsroot/pythoncard/PythonCard/docs/html/framework In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14325 Modified Files: general_concepts_and_limitations.html Log Message: document seems up-to-date, so just changed date/version info Index: general_concepts_and_limitations.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/framework/general_concepts_and_limitations.html,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** general_concepts_and_limitations.html 14 Aug 2004 21:51:40 -0000 1.4 --- general_concepts_and_limitations.html 25 Dec 2005 03:23:55 -0000 1.5 *************** *** 12,16 **** <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: April 10, 2004 for release 0.7.3</p> <p>I'll cover the main points of the PythonCard framework from a user point of view.</p> --- 12,16 ---- <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: December 24, 2005 for release 0.8.1</p> <p>I'll cover the main points of the PythonCard framework from a user point of view.</p>
Update of /cvsroot/pythoncard/PythonCard/docs/html/framework In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32478 Modified Files: events_and_handlers.html Log Message: updated for 0.8.1 added background events and changed openBackground to initialize Index: events_and_handlers.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/framework/events_and_handlers.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** events_and_handlers.html 14 Aug 2004 21:05:15 -0000 1.2 --- events_and_handlers.html 25 Dec 2005 01:22:22 -0000 1.3 *************** *** 12,16 **** <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: April 10, 2004 for release 0.7.3</p> <p>I'll cover the main points from a user point of view.</p> --- 12,16 ---- <?php include "../sidebar.php" ?> <div id="content"> ! <p>Updated: December 24, 2005 for release 0.8.1</p> <p>I'll cover the main points from a user point of view.</p> *************** *** 42,46 **** command mouseClick ! openBackground select </pre> --- 42,46 ---- command mouseClick ! initialize select </pre> *************** *** 63,72 **** <p>All component and menu event handlers take the form - <pre> on_commandName_command</pre> - - or <pre> on_componentName_eventName</pre> --- 63,72 ---- <p>All component and menu event handlers take the form <pre> on_componentName_eventName</pre> + or + + <pre> on_commandName_command</pre> *************** *** 87,94 **** handler for mouseClick events.</p> ! <p>It is common to have an openBackground event such as </p> <pre> ! def on_openBackground(self, event): </pre> --- 87,94 ---- handler for mouseClick events.</p> ! <p>It is common to have an initialize event such as </p> <pre> ! def on_initialize(self, event): </pre> *************** *** 96,100 **** it is more like the HyperCard openStack system message). The other background events are:</p> <pre> activate ! deactivate <- will be added in release 0.8 close idle <- sent when the message queue empties minimize maximize move size </pre> --- 96,101 ---- it is more like the HyperCard openStack system message). The other background events are:</p> <pre> activate ! deactivate close idle <- sent when the message queue empties minimize maximize ! restore move size </pre>
Update of /cvsroot/pythoncard/PythonCard/docs/html/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1088 Added Files: kea_upload.bat Log Message: added my batch file for uploading all the images to the server a variation on this could be used by other people --- NEW FILE: kea_upload.bat --- c:\cvshome\pscp findfilesfig1.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/findfilesfig1.png c:\cvshome\pscp findfilesfig2.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/findfilesfig2.png c:\cvshome\pscp findfilesfig3.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/findfilesfig3.png c:\cvshome\pscp findfilesfig4.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/findfilesfig4.png c:\cvshome\pscp findfilesfig5.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/findfilesfig5.png c:\cvshome\pscp projectmanager.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/projectmanager.png c:\cvshome\pscp resEditorFig1.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig1.png c:\cvshome\pscp resEditorFig10.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig10.png c:\cvshome\pscp resEditorFig11.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig11.png c:\cvshome\pscp resEditorFig12.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig12.png c:\cvshome\pscp resEditorFig13.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig13.png c:\cvshome\pscp resEditorFig14.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig14.png c:\cvshome\pscp resEditorFig15.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig15.png c:\cvshome\pscp resEditorFig16.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig16.png c:\cvshome\pscp resEditorFig17.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig17.png c:\cvshome\pscp resEditorFig18.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig18.png c:\cvshome\pscp resEditorFig19.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig19.png c:\cvshome\pscp resEditorFig2.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig2.png c:\cvshome\pscp resEditorFig20.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig20.png c:\cvshome\pscp resEditorFig21.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig21.png c:\cvshome\pscp resEditorFig22.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig22.png c:\cvshome\pscp resEditorFig23.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig23.png c:\cvshome\pscp resEditorFig24.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig24.png c:\cvshome\pscp resEditorFig25.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig25.png c:\cvshome\pscp resEditorFig3.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig3.png c:\cvshome\pscp resEditorFig4.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig4.png c:\cvshome\pscp resEditorFig5.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig5.png c:\cvshome\pscp resEditorFig6.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig6.png c:\cvshome\pscp resEditorFig7.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig7.png c:\cvshome\pscp resEditorFig8.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig8.png c:\cvshome\pscp resEditorFig9.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/resEditorFig9.png c:\cvshome\pscp shellfig1.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/shellfig1.png c:\cvshome\pscp shellfig2.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/shellfig2.png c:\cvshome\pscp shellfig3.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/shellfig3.png c:\cvshome\pscp shellfig4.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/shellfig4.png c:\cvshome\pscp shellfig5.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/shellfig5.png c:\cvshome\pscp wt1fig1.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt1fig1.png c:\cvshome\pscp wt1fig2.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt1fig2.png c:\cvshome\pscp wt1fig3.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt1fig3.png c:\cvshome\pscp wt2fig1.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig1.png c:\cvshome\pscp wt2fig10.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig10.png c:\cvshome\pscp wt2fig11.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig11.png c:\cvshome\pscp wt2fig2.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig2.png c:\cvshome\pscp wt2fig3.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig3.png c:\cvshome\pscp wt2fig4.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig4.png c:\cvshome\pscp wt2fig5.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig5.png c:\cvshome\pscp wt2fig6.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig6.png c:\cvshome\pscp wt2fig7.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig7.png c:\cvshome\pscp wt2fig8.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig8.png c:\cvshome\pscp wt2fig9.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt2fig9.png c:\cvshome\pscp wt3fig1.png ka...@py...:/home/groups/p/py/pythoncard/htdocs/images/wt3fig1.png
Update of /cvsroot/pythoncard/PythonCard/tools/resourceEditor In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20948 Modified Files: resourceEditor.py Log Message: swapped Raise for Lower in fixComponentOrder Index: resourceEditor.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/resourceEditor/resourceEditor.py,v retrieving revision 1.224 retrieving revision 1.225 diff -C2 -d -r1.224 -r1.225 *** resourceEditor.py 16 Aug 2005 10:17:07 -0000 1.224 --- resourceEditor.py 24 Dec 2005 04:45:57 -0000 1.225 *************** *** 1062,1067 **** def fixComponentOrder(self, name): ! for c in self.components.order: ! self.components[c].Lower() if self.application.pw is not None: --- 1062,1072 ---- 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:
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32513 Modified Files: timers-threads.html Log Message: wx.wxWakeUpIdle() -> wx.WakeUpIdle() Index: timers-threads.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/timers-threads.html,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** timers-threads.html 23 Dec 2005 20:01:51 -0000 1.5 --- timers-threads.html 23 Dec 2005 20:07:43 -0000 1.6 *************** *** 238,242 **** print "myThread x=%d" % x q.put(str(x)) # stick something on message queue ! wx.wxWakeUpIdle() # triggers 'idle' handlers x += 10 </pre> --- 238,242 ---- print "myThread x=%d" % x q.put(str(x)) # stick something on message queue ! wx.WakeUpIdle() # triggers 'idle' handlers x += 10 </pre> *************** *** 251,255 **** refer to the Python Library Reference doco for module </p> <h4>4. Add an idle event handler</h4> ! <p>In the thread function above, the operative line is <span class="code">wx.wxWakeUpIdle()</span> . Upon calling that method, wxWindows tells all open windows, Hey, wake up - something's happened you might need to react to! So we need to add a handler --- 251,255 ---- refer to the Python Library Reference doco for module </p> <h4>4. Add an idle event handler</h4> ! <p>In the thread function above, the operative line is <span class="code">wx.WakeUpIdle()</span> . Upon calling that method, wxWindows tells all open windows, Hey, wake up - something's happened you might need to react to! So we need to add a handler
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31660 Modified Files: timers-threads.html Log Message: converted code blocks to pre and added wx import Index: timers-threads.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/timers-threads.html,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** timers-threads.html 23 Dec 2005 19:46:50 -0000 1.4 --- timers-threads.html 23 Dec 2005 20:01:51 -0000 1.5 *************** *** 69,75 **** But if you haven't yet done so, add the following method code to your <span class="code">Counter</span> class:</p> ! <p class="code"> ! def on_initialize(self, event):<br /> ! print "Window opened"</p> <p>Not very significant - but do save your file, and run <span class="code"> counter.py</span>. You'll see a message on stdout when the window opens.</p> --- 69,76 ---- But if you haven't yet done so, add the following method code to your <span class="code">Counter</span> class:</p> ! <pre> ! def on_initialize(self, event): ! print "Window opened" ! </pre> <p>Not very significant - but do save your file, and run <span class="code"> counter.py</span>. You'll see a message on stdout when the window opens.</p> *************** *** 79,88 **** handler as an opportunity to set up a timer.</p> <p>So change the event handler to the following:</p> ! <p class="code"> ! def on_initialize(self, event):<br /> ! self.myTimer = timer.Timer(self.components.field1, ! -1) # create a timer<br /> ! self.myTimer.Start(5000) # launch timer, to fire ! every 5000ms (5 seconds)</p> <p>You'll also notice from the <span class="code">self.components.field1</span> that the timer is being created in respect of the <span class="code">field1</span> --- 80,88 ---- handler as an opportunity to set up a timer.</p> <p>So change the event handler to the following:</p> ! <pre> ! def on_initialize(self, event): ! self.myTimer = timer.Timer(self.components.field1, -1) # create a timer ! self.myTimer.Start(5000) # launch timer, to fire every 5000ms (5 seconds) ! </pre> <p>You'll also notice from the <span class="code">self.components.field1</span> that the timer is being created in respect of the <span class="code">field1</span> *************** *** 92,98 **** the line at the top of your <span class="code">counter.py</span> program which currently says</p> ! <p class="code">from PythonCard import model</p> <p>and change it to say</p> ! <p class="code">from PythonCard import model, timer</p> <p>Now, we have to make sure we can receive an event every time the clock 'ticks'.</p> --- 92,102 ---- the line at the top of your <span class="code">counter.py</span> program which currently says</p> ! <pre> ! from PythonCard import model ! </pre> <p>and change it to say</p> ! <pre> ! from PythonCard import model, timer ! </pre> <p>Now, we have to make sure we can receive an event every time the clock 'ticks'.</p> *************** *** 110,122 **** <p>Now, add the following method code into class <span class="code"> Counter</span>:</p> ! <p class="code"> ! def on_field1_timer(self, event):<br /> ! print "Got a timer event"<br /> ! startValue = int(self.components.field1.text)<br /> ! endValue = startValue + 10<br /> ! print "Got a timer event, value is now %d" % endValue<br /> ! self.components.field1.text = str(endValue)<br /> ! # uncomment the line below if you've already followed the 'child window' walkthrough<br /> ! #self.minimalWindow.components.field1.text = str(endValue)</p> <p><em>Note</em> - this is ugly, because there's a lot of duplicated functionality. We'll leave it to you to factorise your code appropriately, --- 114,127 ---- <p>Now, add the following method code into class <span class="code"> Counter</span>:</p> ! <pre> ! def on_field1_timer(self, event): ! print "Got a timer event" ! startValue = int(self.components.field1.text) ! endValue = startValue + 10 ! print "Got a timer event, value is now %d" % endValue ! self.components.field1.text = str(endValue) ! # uncomment the line below if you've already followed the 'child window' walkthrough ! #self.minimalWindow.components.field1.text = str(endValue) ! </pre> <p><em>Note</em> - this is ugly, because there's a lot of duplicated functionality. We'll leave it to you to factorise your code appropriately, *************** *** 165,171 **** <p>Now, add to the top of <span class="code">counter.py</span> the following statement:</p> ! <p class="code">import thread, Queue</p> <p>This will give us access to Python's thread creation/dispatch functions, ! as well as message queues</p> <h4>A Little Theory</h4> <p>I'll keep this short and sweet. Simply, the safest way for threads to --- 170,179 ---- <p>Now, add to the top of <span class="code">counter.py</span> the following statement:</p> ! <pre> ! import thread, Queue ! import wx ! </pre> <p>This will give us access to Python's thread creation/dispatch functions, ! as well as message queues and wxPython.</p> <h4>A Little Theory</h4> <p>I'll keep this short and sweet. Simply, the safest way for threads to *************** *** 207,213 **** <p>Refer back to the <span class="code">on_initialize(self, event)</span> handler above, and add the following statement:</p> ! <p class="code"> ! # Add a message queue<br /> ! self.msgQueue = Queue.Queue()</p> <p>This sticks a message queue into our <span class="code">Counter</span> window class, that will be used for communication from the thread backend to --- 215,222 ---- <p>Refer back to the <span class="code">on_initialize(self, event)</span> handler above, and add the following statement:</p> ! <pre> ! # Add a message queue ! self.msgQueue = Queue.Queue() ! </pre> <p>This sticks a message queue into our <span class="code">Counter</span> window class, that will be used for communication from the thread backend to *************** *** 216,240 **** <p>Add the following <strong>global</strong> function to your <span class="code">counter.py</span>:</p> ! <p class="code"> ! def myThread(*argtuple):<br /> ! """<br /> ! A little thread we've added<br /> ! """<br /> ! print "myThread: entered"<br /> ! q = argtuple[0]<br /> ! print "myThread: starting loop"<br /> ! x = 10<br /> ! while 1:<br /> ! time.sleep(10) # time unit is seconds<br /> ! print "myThread x=%d" % x<br /> ! q.put(str(x)) # stick something on message queue<br /> ! wx.wxWakeUpIdle() # triggers 'idle' handlers<br /> ! x += 10</p> <h4>3. Launch the Thread</h4> <p>Add the following lines at the end of your <span class="code">on_initialize</span> handler:</p> ! <p class="code"> ! # Now launch the thread<br /> ! thread.start_new_thread(myThread, (self.msgQueue,))</p> <p>Notice that we have to pass the queue object to the thread in a tuple - refer to the Python Library Reference doco for module </p> --- 225,251 ---- <p>Add the following <strong>global</strong> function to your <span class="code">counter.py</span>:</p> ! <pre> ! def myThread(*argtuple): ! """ ! A little thread we've added ! """ ! print "myThread: entered" ! q = argtuple[0] ! print "myThread: starting loop" ! x = 10 ! while True: ! time.sleep(10) # time unit is seconds ! print "myThread x=%d" % x ! q.put(str(x)) # stick something on message queue ! wx.wxWakeUpIdle() # triggers 'idle' handlers ! x += 10 ! </pre> <h4>3. Launch the Thread</h4> <p>Add the following lines at the end of your <span class="code">on_initialize</span> handler:</p> ! <pre> ! # Now launch the thread ! thread.start_new_thread(myThread, (self.msgQueue,)) ! </pre> <p>Notice that we have to pass the queue object to the thread in a tuple - refer to the Python Library Reference doco for module </p> *************** *** 246,252 **** get 'woken up'. So add the following method into your <span class="code">Counter</span> class</p> ! <p class="code"> ! def on_idle(self, event):<br /> ! print "on_idle entered" </p> <h4>5. Check the message queue and react accordingly</h4> <p>Presently, our 'idle' handler isn't very useful - but if you run --- 257,264 ---- get 'woken up'. So add the following method into your <span class="code">Counter</span> class</p> ! <pre> ! def on_idle(self, event): ! print "on_idle entered" ! </pre> <h4>5. Check the message queue and react accordingly</h4> <p>Presently, our 'idle' handler isn't very useful - but if you run *************** *** 254,267 **** So now, we'll make it do what it needs to do - reacting to events from our background thread. Replace the idle handler above with the following:</p> ! <p class="code"> ! def on_idle(self, event):<br /> ! print "on_idle entered"<br /> ! while not self.msgQueue.empty():<br /> ! # Handle messages from our thread<br /> ! msg = self.msgQueue.get()<br /> ! print "on_idle: msg='%s'" % msg<br /> ! self.components.field1.text = msg<br /> ! # uncomment the following if you've followed the 'child window' walkthrough<br /> ! #self.minimalWindow.components.field1.text = msg</p> <p>Now, we're all done. Launch your counter.py, and watch as the background thread launches, and periodically sends its messages to the user interface, --- 266,280 ---- So now, we'll make it do what it needs to do - reacting to events from our background thread. Replace the idle handler above with the following:</p> ! <pre> ! def on_idle(self, event): ! print "on_idle entered" ! while not self.msgQueue.empty(): ! # Handle messages from our thread ! msg = self.msgQueue.get() ! print "on_idle: msg='%s'" % msg ! self.components.field1.text = msg ! # uncomment the following if you've followed the 'child window' walkthrough ! #self.minimalWindow.components.field1.text = msg ! </pre> <p>Now, we're all done. Launch your counter.py, and watch as the background thread launches, and periodically sends its messages to the user interface,
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29353 Modified Files: timers-threads.html Log Message: updated samples.html link Index: timers-threads.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/timers-threads.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** timers-threads.html 13 Aug 2005 14:39:41 -0000 1.3 --- timers-threads.html 23 Dec 2005 19:46:50 -0000 1.4 *************** *** 19,23 **** David Primmer, and follows on from the <a href="walkthrough3.html">How to Add a child window</a> lesson. It's based on techniques taken from the ! various PythonCard <a href="/samples/samples.html">sample programs</a>.</p> <p>This walkthrough was originally written by David McNab (<strong>david at rebirthing dot co dot nz</strong>), and was revised by, --- 19,23 ---- David Primmer, and follows on from the <a href="walkthrough3.html">How to Add a child window</a> lesson. It's based on techniques taken from the ! various PythonCard <a href="http://pythoncard.sourceforge.net/samples/samples.html">sample programs</a>.</p> <p>This walkthrough was originally written by David McNab (<strong>david at rebirthing dot co dot nz</strong>), and was revised by,
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14778 Modified Files: walkthrough2.html Log Message: changed code blocks to use <pre> where code is meant to be copied and pasted into an editor Index: walkthrough2.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough2.html,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** walkthrough2.html 19 Dec 2005 23:35:38 -0000 1.13 --- walkthrough2.html 22 Dec 2005 18:20:33 -0000 1.14 *************** *** 161,169 **** lines will be indented twice.</li> </ol> ! <p class="code"> def on_incrBtn_mouseClick(self, event):<br /> ! startValue = int(self.components.field1.text)<br /> ! endValue = startValue + 1<br /> ! self.components.field1.text ! = str(endValue)</p> <p>Let's examine this script because the others we will write are all but identical.</p> --- 161,170 ---- lines will be indented twice.</li> </ol> ! <pre> ! def on_incrBtn_mouseClick(self, event): ! startValue = int(self.components.field1.text) ! endValue = startValue + 1 ! self.components.field1.text = str(endValue) ! </pre> <p>Let's examine this script because the others we will write are all but identical.</p> *************** *** 205,210 **** <li>Create a final handler for the Reset button that looks like this:</li> </ol> ! <p class="code"> def on_resetBtn_mouseClick(self, event):<br /> ! self.components.field1.text = "0"</p> <p>Figure 5 shows you what your editor window should look like now.</p> <p class="imageCaption"><img src="images/wt2fig5.png" alt="Editor Showing Final Code Changes" /><br /> --- 206,213 ---- <li>Create a final handler for the Reset button that looks like this:</li> </ol> ! <pre> ! def on_resetBtn_mouseClick(self, event): ! self.components.field1.text = "0" ! </pre> <p>Figure 5 shows you what your editor window should look like now.</p> <p class="imageCaption"><img src="images/wt2fig5.png" alt="Editor Showing Final Code Changes" /><br /> *************** *** 287,291 **** handler name shown here:</li> </ol> ! <p class="code"> def on_counterMenuIncrement_select(self, event):</p> <ol start="9"> <li>Copy the three lines of the function in <span class="code">on_incrBtn_mouseClick</span> --- 290,296 ---- handler name shown here:</li> </ol> ! <pre> ! def on_counterMenuIncrement_select(self, event): ! </pre> <ol start="9"> <li>Copy the three lines of the function in <span class="code">on_incrBtn_mouseClick</span>
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23290 Modified Files: walkthrough2.html Log Message: Add Button -> Button and added comment about additional explanation needed on new dialogs after adding a component Index: walkthrough2.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough2.html,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** walkthrough2.html 21 Aug 2005 22:57:34 -0000 1.12 --- walkthrough2.html 19 Dec 2005 23:35:38 -0000 1.13 *************** *** 120,124 **** <li>Select Save from the File menu to save the counter.rsrc.py resource file.</li> ! <li>From the "Components" menu, select "Add Button"</li> <li>In the Property Editor window, select the "name" property in the right-hand list of properties for the Button1 Button object. Change the --- 120,125 ---- <li>Select Save from the File menu to save the counter.rsrc.py resource file.</li> ! <li>From the "Components" menu, select "Button"</li> ! <!-- we need to enhance this with a description of Alex's dialogs --> <li>In the Property Editor window, select the "name" property in the right-hand list of properties for the Button1 Button object. Change the
Update of /cvsroot/pythoncard/PythonCard/tools/oneEditor In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19138 Modified Files: tabcodeEditor.py Log Message: Add a spacer to the horizontal box sizer containing the drop-down menus for handler and events. This ensures that adequate space is left, even when wxPython 2.6.1 calculatea min size for the drop down of (0,0). Index: tabcodeEditor.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/oneEditor/tabcodeEditor.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** tabcodeEditor.py 19 Dec 2005 23:18:04 -0000 1.13 --- tabcodeEditor.py 19 Dec 2005 23:20:55 -0000 1.14 *************** *** 182,185 **** --- 182,186 ---- sizer2.Add(self.components.popComponentNames) sizer2.Add(self.components.popComponentEvents) + sizer2.Add( (10,21) ) sizer1.Add(sizer2, 0)
Update of /cvsroot/pythoncard/PythonCard/tools/codeEditor In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18442/codeEditor Modified Files: codeEditor.py Log Message: Change hack for Python 2.3 to BIG HACK for Python 2.3 or 2.4 help files on Win. Index: codeEditor.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/codeEditor/codeEditor.py,v retrieving revision 1.125 retrieving revision 1.126 diff -C2 -d -r1.125 -r1.126 *** codeEditor.py 18 Aug 2004 16:24:56 -0000 1.125 --- codeEditor.py 19 Dec 2005 23:18:04 -0000 1.126 *************** *** 1212,1220 **** if sys.platform.startswith("win"): ! # KEA 2003年10月15日 ! # hack for Python 2.3 Windows help file # need to decide on a clean way of handling various doc options fn = os.path.dirname(os.__file__) ! fn = os.path.join(fn, os.pardir, "Doc", "Python23.chm") fn = os.path.normpath(fn) if os.path.isfile(fn): --- 1212,1221 ---- if sys.platform.startswith("win"): ! # KEA 2003年10月15日 AGT 2005年12月20日 ! # BIG hack for Python 2.3 Windows help file (or Python 2.4) # need to decide on a clean way of handling various doc options fn = os.path.dirname(os.__file__) ! chmfile = "Python" + sys.version[0] + sys.version[2] + ".chm" ! fn = os.path.join(fn, os.pardir, "Doc", chmfile) fn = os.path.normpath(fn) if os.path.isfile(fn):
Update of /cvsroot/pythoncard/PythonCard/tools/oneEditor In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18442/oneEditor Modified Files: tabcodeEditor.py Log Message: Change hack for Python 2.3 to BIG HACK for Python 2.3 or 2.4 help files on Win. Index: tabcodeEditor.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/oneEditor/tabcodeEditor.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** tabcodeEditor.py 3 Nov 2005 00:22:52 -0000 1.12 --- tabcodeEditor.py 19 Dec 2005 23:18:04 -0000 1.13 *************** *** 1244,1252 **** if sys.platform.startswith("win"): ! # KEA 2003年10月15日 ! # hack for Python 2.3 Windows help file # need to decide on a clean way of handling various doc options fn = os.path.dirname(os.__file__) ! fn = os.path.join(fn, os.pardir, "Doc", "Python23.chm") fn = os.path.normpath(fn) if os.path.isfile(fn): --- 1244,1253 ---- if sys.platform.startswith("win"): ! # KEA 2003年10月15日 AGT 2005年12月20日 ! # BIG hack for Python 2.3 Windows help file or Python 2.4 # need to decide on a clean way of handling various doc options fn = os.path.dirname(os.__file__) ! chmfile = "Python" + sys.version[0] + sys.version[2] + ".chm" ! fn = os.path.join(fn, os.pardir, "Doc", chmfile) fn = os.path.normpath(fn) if os.path.isfile(fn):
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13506 Modified Files: index.html Log Message: changed link to point to website which is the real location of sample imgs Index: index.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/index.html,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -d -r1.64 -r1.65 *** index.html 17 Dec 2005 14:56:48 -0000 1.64 --- index.html 19 Dec 2005 23:02:09 -0000 1.65 *************** *** 44,48 **** <ul> <li><a href="http://sourceforge.net/project/showfiles.php?group_id=19015">Download</a> the latest version of the package</li> ! <li>View some <a href="samples.html">screenshots</a> of the sample applications</li> </ul> --- 44,48 ---- <ul> <li><a href="http://sourceforge.net/project/showfiles.php?group_id=19015">Download</a> the latest version of the package</li> ! <li>View some <a href="http://pythoncard.soureforge.net/samples/samples.html">screenshots</a> of the sample applications</li> </ul>
Update of /cvsroot/pythoncard/PythonCard/docs/GettingStarted In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7969/GettingStarted Modified Files: starter1.py Log Message: Removed the import of dialog, so that the section of walkthrough1 which tells the user to add it is correct. Index: starter1.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/GettingStarted/starter1.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** starter1.py 9 Feb 2005 08:17:53 -0000 1.7 --- starter1.py 17 Dec 2005 15:20:02 -0000 1.8 *************** *** 6,10 **** """ ! from PythonCard import model, dialog --- 6,10 ---- """ ! from PythonCard import model
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4895 Modified Files: index.html samples.html Log Message: Fix broken link to the samples screenshots (and typo). Index: samples.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/samples.html,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** samples.html 26 Jul 2004 15:35:31 -0000 1.12 --- samples.html 17 Dec 2005 14:56:49 -0000 1.13 *************** *** 25,29 **** captured on different machines using different color schemes. This shows that PythonCard which relies on wxPython/wxWindows is using native controls. There ! are some Linux screen shots will on the next samples page.</strong></p> <p>To download the framework and these applications go to the downloads section of the project site on <a href="http://sourceforge.net/projects/pythoncard/">Sourceforge</a></p> --- 25,29 ---- captured on different machines using different color schemes. This shows that PythonCard which relies on wxPython/wxWindows is using native controls. There ! are some Linux screen shots on the next samples page.</strong></p> <p>To download the framework and these applications go to the downloads section of the project site on <a href="http://sourceforge.net/projects/pythoncard/">Sourceforge</a></p> Index: index.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/index.html,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -d -r1.63 -r1.64 *** index.html 18 Aug 2004 19:52:23 -0000 1.63 --- index.html 17 Dec 2005 14:56:48 -0000 1.64 *************** *** 44,48 **** <ul> <li><a href="http://sourceforge.net/project/showfiles.php?group_id=19015">Download</a> the latest version of the package</li> ! <li>View some <a href="samples/samples.html">screenshots</a> of the sample applications</li> </ul> --- 44,48 ---- <ul> <li><a href="http://sourceforge.net/project/showfiles.php?group_id=19015">Download</a> the latest version of the package</li> ! <li>View some <a href="samples.html">screenshots</a> of the sample applications</li> </ul>