Gregor Lingl wrote: > I've decided, that my new turtle graphics module ready > now.
Gregor- Nice work! Just for fun, I've integrated xturle.py with PataPata as a component, and here are a few changes I made to it (in diff format, at the end of this message), in case you are interested. Using PataPata, I was able to interactively build a xturtle script which took parameters, where the parameters were entered via Morphs I made as I needed them (like iterations, or color). I have an example world file with two widgets. Now, obviously, such an activity is not for the beginner user -- but more advanced ones might like being able to make parameterized xturtle functions. Since I use Python2.3 mainly as it is the default install for Debian, I made xturtle.py run with Python2.3 by changing the static methods and the use of sorted(). There might be more Python2.3 issues, but those were the only ones I've come across so far. I also added a line of code to reset TurtleScreen._RUNNING before throwing the Terminator exception, as otherwise you can't restart the turtle if you are using the library in a long running application. When I started playing around with it, that was a big issue for me, so that motivated my adding a BREAK interrupt key response to PataPata (though it only works for the xturtle XTurtleCanvas -- an endless loop doing nothing or just printing will still hang TK and PataPata). Now, whether you want to make it run with Python2.3 may be debatable, and you may well use those static methods in other code, so making them instance methods may well break other demos. But you most probably want to reset the _Running flag in any case. PataPata 0.1.19 has the XTurtleCanvas.py component in it, but the extra BREAK handling code is only in the latest stuff I've been adding to SVN here: http://svn.sourceforge.net/viewcvs.cgi/patapata/trunk/PataPata/ By the way, here is a simple world file written by PataPata that uses an XTurtleCanvas: http://svn.sourceforge.net/viewcvs.cgi/patapata/trunk/PataPata/WorldWithXTurtlePC.py?view=markup Note how the color and iterations are taken from GUI widget Morphs in the section: def mouseClick(self): reset() down() color(self.components.colorEntry.text) for i in range(int(self.components.iterationsEntry.text)): forward(100) right(91) forward(50) This is the file that defines the XTurtleCanvas (among other things): http://svn.sourceforge.net/viewcvs.cgi/patapata/trunk/PataPata/WorldCommonPC.py?view=markup This is the relevant xturtle specific code to make an XTurtleCanvas: XTurtleCanvas = world.newPrototype("Morph") XTurtleCanvas.size = (200, 200) XTurtleCanvas.pen = None def _newWidget(self): xturtle._root = self.world.widget newCanvas = xturtle.ScrolledCanvas(self.container.widget) xturtle._canvas = newCanvas self.setAttributeWithoutSideEffects("pen", xturtle.Pen()) xturtle._pen = self.pen return newCanvas XTurtleCanvas._newWidget = _newWidget def _destroyEmbeddedWidget(self): if self.widget: if xturtle._canvas == self.widget: xturtle._canvas = None if xturtle.pen == self.pen: xturtle._pen = None self.widget.destroy() self.widget = None self.setAttributeWithoutSideEffects("pen", None) XTurtleCanvas._destroyEmbeddedWidget = _destroyEmbeddedWidget def windowFocusIn(self): if self.widget: xturtle._canvas = self.widget xturtle._pen = self.pen XTurtleCanvas.windowFocusIn = windowFocusIn XTurtleCanvas.localProperty("pen").writeFunction = "_store_None" XTurtleCanvas.localProperty("pen").copyFunction = "_store_None" XTurtleCanvas.localProperty("pen").setFunction = None world.worldGlobals["XTurtleCanvas"] = XTurtleCanvas (The bit at the end with properties just ensures the pen is read only and is stored as None when the world is saved to a Python file). It was a bit tricky to get the thing to work right with those global functions when you have multiple canvases! I'm still not sure I'm quite satisfied with the result, but basically I swap in _pen and _canvas into the loaded xturtle module from the window's xturtle canvas whenever a TK window gets focus (I had to add that window focus handling too). This would be a problem if there was more than one xturtle canvas on a window, but by then for multiple canvases on one window I assume one could write code that accessed the each canvas's pen directly instead of using those globals functions. Good luck with your talk. Thanks for making such a nice library. --Paul Fernhout $ diff xturtle.py ~/workspace/PataPata/xturtle.py 20a21,22 > # PDF -- Modified to work with Python2.3 instead of 2.4 (removed static methods use and sorted() use) > # PDF -- added "TurtleScreen._RUNNING = True" before raised Terminator. 292,294c294,297 < < @staticmethod < def _blankimage(): --- > > # pdf modified next two methods to not be static so coudl run with Python 2.3 > [EMAIL PROTECTED] > def _blankimage(self): 301,302c304,305 < @staticmethod < def _image(filename): --- > [EMAIL PROTECTED] > def _image(self, filename): 795a799 > TurtleScreen._RUNNING = True 864,865c868,872 < """ < return sorted(self._shapes.keys()) --- > """ > # PDF MODIFIED work with Python 2.3 > keys = self._shapes.keys() > keys.sort() > return keys _______________________________________________ Edu-sig mailing list [email protected] http://mail.python.org/mailman/listinfo/edu-sig
