Any suggestions about turlte.py

Hello everyone, As a consequence of my complaining about it in my PyCon talk, I have been invited to submit some patches for turtle.py. To my mind, turtle.py should be something that one could actually use for some very simple "programming with graphics" lessons, with NO tweaking or additional software. So I think the following would be handy: 1. equally usable with either "import * from turtle" or "import turtle" imports 2. should open with a window covering at least half the screen (the current default is too small to be useful) 3. should offer some simple configuration choices for things like initial size and shape, but mostly rely on reasonable defaults 4. should offer a class wrapper so that that one could easily instantiate different turtles for a first experience with objects. 5. some minor tweaks to make it better behaved when run from IDLE Does anyone have any feedback on these ideas or any other suggestions about how turtle.py might be improved without being fundamentally changed? Note: this is about turtle.py only, for all its deficiencies. Any suggestions to try another library, system, or language will be cheerfully, but resolutely, ignored. ;) Cheers, Vern Ceder -- This time for sure! -Bullwinkle J. Moose ----------------------------- Vern Ceder, Director of Technology Canterbury School, 3210 Smith Road, Ft Wayne, IN 46804 vceder@canterburyschool.org; 260-436-0746; FAX: 260-436-5137

On 2/27/06, Vern Ceder <vceder@canterburyschool.org> wrote:
Hello everyone,
As a consequence of my complaining about it in my PyCon talk, I have been invited to submit some patches for turtle.py. To my mind, turtle.py should be something that one could actually use for some very simple "programming with graphics" lessons, with NO tweaking or additional software.
Good idea!
So I think the following would be handy:
[snip]
4. should offer a class wrapper so that that one could easily instantiate different turtles for a first experience with objects.
Definitely!
5. some minor tweaks to make it better behaved when run from IDLE
Does anyone have any feedback on these ideas or any other suggestions about how turtle.py might be improved without being fundamentally changed?
Yes, but .... (see below)
Note: this is about turtle.py only, for all its deficiencies. Any suggestions to try another library, system, or language will be cheerfully, but resolutely, ignored. ;)
It would be nice if turtle.py could have methods that would be independent of Tkinter. However, I suspect that this falls under the category of "fundamentally changing it". have been thinking of including a version of turtle graphics inside rur-ple (a Python Learning Environment I designed); however, rur-ple is based on wxPython. So, I guess, I will have to write my own... One thing that, to my mind, is even more important than changing turtle.py is to write "lessons" on how to use it. If, at the very least, you include some example programs, I think it would be greatly appreciated. Best of luck! André
Cheers, Vern Ceder

Vern Ceder schrieb:
Hello everyone,
As a consequence of my complaining about it in my PyCon talk, I have been invited to submit some patches for turtle.py. To my mind, turtle.py should be something that one could actually use for some very simple "programming with graphics" lessons, with NO tweaking or additional software.
Hello all, I'm very happy, that this topic is coming up. In my opinion turtle graphics is a very valuable tool for learning (and teaching) programming. That is the reason, why I chose turtle graphics as the basic tool in my textbook "Python für Kids" (written in German), although I felt, that Python's turtle.py was rather limited. In my book I tried (imho successfully) to introduce nearly every programming concept by visualizing it via turtle graphics. Of course there are many other ways to to that, but this is definitely one, which one can go. In the meantime (and looking forward to preparing a second edition of my book) I've been working on a new turtle graphics module - I named it Xturtle.py. My main intention was just to achieve what Vern Ceder wrote in the lines above:
"programming with graphics" lessons, with NO tweaking or additional software.
My main inspiration was the turtle graphics component of Logo (specifically of MSW-Logo). So I'd like to participate in the development of this amended tool. What I can offer for now is the following: Consider Xturtle.py as a proposition about what a turtle module could comprise. So have a look at the functions it provides and at examples done with it. It is *NOT* intetended as final result but only as a prototype - but a prototype which had been in use with numerous classes and students since two years and really showed up very few bugs. I'm currently doing a complete rewrite, which - in fact - I intended to offer to you slready before this thread started up. I think it will take two more intensive coding weekends until I'll come up with a "pre alpha release". In the meantime 1) I submit my Xturtle.py module along with a set of 10+ demo samples. I've zipped them into a package and I'll try to submit them as an attachment in a separate follow up posting. Moreover the zipped package XturtlePkg.ZIP as well as the single files can be downloaded from http://ada.rg16.asn-wien.ac.at/~python/Xturtle/ The README.TXT, which mainly contains a description of the sample programs, will be attached to this posting. Of course I'd like to get feedback from those of you, who find turtle graphics useful for teaching, but ALSO FROM THOSE OF YOU, who "don't think *any* kind of turtle graphics is essential to learning". I'd like to stress, that there now is an effort to produce a valuable teaching tool, which should be done as well as possible. Nonwithstanding the fact, that not all who teach Python will use it, nor those, who will use it, will use it in the same way. Moreover let's remember, that turtle graphics was invented to teach programming to very young people. So let's do it in a way, that interesting things can easily be done with it. 2) When thinking about a renewed turtle.py, there come up a lot of points to discuss - especially in the early stage of development. (Considering the fact, that here in Europe it's 3:30 in the morning, I'll only will touch a few of them) (a) How about compatibility? Should every old turtle program be executable with the amended module? Remind that there is some strange behaviour in the old module concerning fill. IMO it should be discussed if the "radians"-mode in turtle.py should be retained. (Is it really useful?) (b) The problem of the "hanging turtle". This was introduced with Python 2.3 when IDLE was renewed. There exist at least to possible "solutions": (a) to use IDLE with the -n switch whenever *interactive* turtle graphics is needed. This is rather easy, as opening IDLE for editing a given Python program (at least under Windows) opens it automatically in this -n - switch - mode. I for my part work with two different links to IDLE on my desktop, normal mode and "no subprocesses" mode, also in my classes. (b) one could try to use the approach of John Zelle, which he did in his graphics package, namely to let the drawing do in a separate thread. I don't know if this is easily possible with the animated drawing turtles - perhaps one should produce a prototype to see ... (Guido two or three years ago told me, that Tkinter is not threadsave) (c) I'd propose to add a sort of TurtleCanvas class to the turtle module. (You will observe that Xturtle works with a scrolled canvas due to a comment in the source code of good old turtle.py, which asked for that ;-) ). There are simply several canvas oriented commands (like setbg etc.) To implement them as Pen (= Turtle) methods doesn't make sense. Also resizing the canvas would be a useful candidate (?). (d) I'll add one more question as an example: turtle.py has the function width() which sets the thickness of the lines to draw. There is no function to "get" it. In Xturtle.py I've implemented pensize() (with width() as an alias) in a way thatit can be used to set the pensize, when called with an argument and to return the current pensize when called without arguments. Would you like this or would you prefer get- and set- functions() for each property? What is the "more pythonic" way? There are many functions concerning pen-properties where this problem arises. They should be treated uniformly. I'll close for now. Only a few remarks to the following:
So I think the following would be handy:
1. equally usable with either "import * from turtle" or "import turtle" imports
2. should open with a window covering at least half the screen (the current default is too small to be useful) Xturtle.py does so 3. should offer some simple configuration choices for things like initial size and shape, but mostly rely on reasonable defaults ok, easy to do 4. should offer a class wrapper so that that one could easily instantiate different turtles for a first experience with objects. I don't understand this question. Currently there are the classes Pen and RawPen in th turtle module. The anonymous turtle is in fact an instance of Pen (named _pen). It is easy to uses several turtles at
I think this is possible currently . What do you meadn exactly? Something like "from turtle import Pen"? the same time.
5. some minor tweaks to make it better behaved when run from IDLE I fear, these will become major tweaks ... Does anyone have any feedback on these ideas or any other suggestions about how turtle.py might be improved without being fundamentally changed?
Note: this is about turtle.py only, for all its deficiencies. Any suggestions to try another library, system, or language will be cheerfully, but resolutely, ignored. ;) OK - Xturtle uses no other library, system nor language - so please do not ignore it - not even resolutely ;-)
Regards Gregor P.S.: Xturtle is here, along with its example programs: http://ada.rg16.asn-wien.ac.at/~python/Xturtle/
Cheers, Vern Ceder
-- Gregor Lingl Reisnerstrasse 3/19 A-1030 Wien Telefon: +43 1 713 33 98 Mobil: +43 664 140 35 27 Website: python4kids.net 2006-03-01 Xturtle.py is the prototype of a turtle module written in Python. It is intended to serve as a first proposition what functions and features I consider to be useful in a turtle module and what can easily be done in Python with Tkinter. Starting point was the turtle module contained in the current Python distribution. To a far extent this eXperimental turtle module is compatible with turtle.py. The code is typical experimental. I'm currently doing a complete rewrite, which I expect to be in a state of a "pre-alpha-release" within about two weeks. In the meantime there is much to discuss - see my posting on Python Edu-Sig. The Xturtle-package contains 1. the Xturtle.py module (eXperimental turtle module) 2. this document - mainly to discribe the 3. set of included examples 4. A documentation containing a description of (nearly) all classes and functions contained in the module - written in German language :-( Nevertheless it may be useful for you, as you can see which functions with which parameter-lists are provided. And the function names are English anyway. It is in rtf-format (At least I've translated most of the texts occuring in the sample programs.) ================= Important remark! ================= To do interactive turtle-graphics from IDLE, you have to run IDLE with the -n-switch (No subprocesses!) If you do so, your turtle-graphics programs must not contain a mainloop() call. There is only one example (Xplotter.py) which I recommend to use with IDLE in this way. Interestingly in Windows you can achieve this by opening the Python program by right-clicking with the mouse and chosing Edit with IDLE. Then press F5 from the active editor - window to run the program. After the program has been run, you can give additional graphics-commands from the IDLE shell window, if you want and modify the graphics to your liking. =========================================================== List of example-programs. Under Windows you can run them by double-clicking them in the windows explorer. Xturtle.py must be on the search path for modules. E.G. in the same directory as the examples or in the directory where turtle.py lives. =========================================================== There are examples from elementary to more elaborated. Some of them I used for my teaching, some only to demonstrate what can be done with turtle.py They are not intended to serve as examples for *optimal* solutions. 0. Xturtle.py has a if __name__== "__main__" demo: So simply start it. First you see the demo from turtle.py to demonstrate compatibility, then you can observe some Xturtle features. 1. radioactive.py paints radioactivity-sign if you import turtle instaed of Xturtle, the program display a subtle bug of turtle.py program essentially written by one of my students 2. yinyang.py displays a yin-yang symbol try also with turtle instead of Xturtle 3. Xyinyang.py same as yinyang.py, but uses some (few) features of Xturtle 4. sierpinsky.py and Xsierpinsky.py: two coloured sierpinsky-triangles, one for turtle, the other one for Xturtle 5. Xcurlicues.py display three of the curlicues described by Ian Stuart in his book "Another Fine Math You've Got Me Into ..." --- very well suited for turtle graphics. After the third graphic has been displayed, shut the graphics window. (The third one can only be generated thus easily with a language with long integer arithmetics.) 6. Xtree.py displays a typical binary tree as done so often with turtle graphics, BUT this time done with a Python generator. As a result the tree is displayed the breadth-first-way. 7. Xforest.py elaborates the idea from 6. 8. Xhangman.py This is from my book "Python für Kids" - only turtle replaced by Xturtle. Compatibility-check. (You can do the reverse and see, that it also runs with turtle.py) 9. Xmoorhuhn.py is a well known action game. Uses three gifs contained in the directory. Only for people accustomed to this type of games. (I normally achieve a hit rate of 0.25 :-( ) 10. Xgame2 is a very strange game, which I invented for demo purposes. It is an event driven program for two players. There are two turtles on the screen. One of them is governed by mouseclicks (left, middle, right), the other one by keypresses (arrow-keys: left/up/right) One of them is red (the hunter), the other one - blue - is the prey (i.e. to be cought). The role of the turtles - and accordingly their color - changes randomly. So while it's fin to be far away, if you are hunted, it's not so fine if you suddenly become the hunter .... 11. Xspaceship is intended as a learning game. There is a spaceship in space without gravity. It has to be led to a target by simulated rocket propulsion. Start the game and again use three arrow-keys to move it around. But be aware, that you only can stop it by turning it 180 degrees and "accelerate" it in the opposite direction .... Students like it ... 12. mill1.py - doubleclick and look. A very simple animation. mill2.py - doubleclick and look. Another animation. Wait a little, it will develop differently. These two programs use an experimental feature, which is not documented: userdefined turtle-shapes. ================================================== 13. Xplotter.py === USE THIS IN INTERACTIVE MODE e.g. by rightclicking and chosing Edit with IDLE. run it. It is intended to show the relation between a function and its derivative. Click several times into the graphics window. If you have learned enough about the graphs shown type >>> plot(fun, -1, 2.5) (there is a function fun defined in the script) or define and display your own functions (along with their derivatives) ===================================================

Everyone, It seems that many of us (probably to our mutual surprise) have use for the humble turtle. I want to get an improved, backward compatible patch into the standard package fairly soon, so over the next few days I will see if I can't come up with something that covers most of the ideas suggested here, including Gregor's libraries to some extent. I will of course post it for comments/testing before I send it along. I would also suggest that those of us who are interested in turtle graphics consider what we want (even IF we want) in an extended turtle package as well, and how much we would want to push for its inclusion in the standard libraries. My sense is that some of us will be fine if the basic turtle.py is usable, but others will really want more. Figuring out the "what" and "how much" may take some time. Certainly Gregor's Xturtle package will give us some direction in thinking about it. Cheers, Vern Gregor Lingl wrote:
Vern Ceder schrieb:
Hello everyone,
As a consequence of my complaining about it in my PyCon talk, I have been invited to submit some patches for turtle.py. To my mind, turtle.py should be something that one could actually use for some very simple "programming with graphics" lessons, with NO tweaking or additional software.
Hello all,
I'm very happy, that this topic is coming up. In my opinion turtle graphics is a very valuable tool for learning (and teaching) programming. That is the reason, why I chose turtle graphics as the basic tool in my textbook "Python für Kids" (written in German), although I felt, that Python's turtle.py was rather limited. In my book I tried (imho successfully) to introduce nearly every programming concept by visualizing it via turtle graphics. Of course there are many other ways to to that, but this is definitely one, which one can go.
In the meantime (and looking forward to preparing a second edition of my book) I've been working on a new turtle graphics module - I named it Xturtle.py.
My main intention was just to achieve what Vern Ceder wrote in the lines above:
"programming with graphics" lessons, with NO tweaking or additional software.
My main inspiration was the turtle graphics component of Logo (specifically of MSW-Logo).
So I'd like to participate in the development of this amended tool.
What I can offer for now is the following:
Consider Xturtle.py as a proposition about what a turtle module could comprise. So have a look at the functions it provides and at examples done with it. It is *NOT* intetended as final result but only as a prototype - but a prototype which had been in use with numerous classes and students since two years and really showed up very few bugs.
I'm currently doing a complete rewrite, which - in fact - I intended to offer to you slready before this thread started up. I think it will take two more intensive coding weekends until I'll come up with a "pre alpha release".
In the meantime
1) I submit my Xturtle.py module along with a set of 10+ demo samples. I've zipped them into a package and I'll try to submit them as an attachment in a separate follow up posting.
Moreover the zipped package XturtlePkg.ZIP as well as the single files can be downloaded from
http://ada.rg16.asn-wien.ac.at/~python/Xturtle/
The README.TXT, which mainly contains a description of the sample programs, will be attached to this posting.
Of course I'd like to get feedback from those of you, who find turtle graphics useful for teaching, but ALSO FROM THOSE OF YOU, who "don't think *any* kind of turtle graphics is essential to learning".
I'd like to stress, that there now is an effort to produce a valuable teaching tool, which should be done as well as possible. Nonwithstanding the fact, that not all who teach Python will use it, nor those, who will use it, will use it in the same way. Moreover let's remember, that turtle graphics was invented to teach programming to very young people. So let's do it in a way, that interesting things can easily be done with it.
2) When thinking about a renewed turtle.py, there come up a lot of points to discuss - especially in the early stage of development. (Considering the fact, that here in Europe it's 3:30 in the morning, I'll only will touch a few of them)
(a) How about compatibility? Should every old turtle program be executable with the amended module? Remind that there is some strange behaviour in the old module concerning fill. IMO it should be discussed if the "radians"-mode in turtle.py should be retained. (Is it really useful?)
(b) The problem of the "hanging turtle". This was introduced with Python 2.3 when IDLE was renewed. There exist at least to possible "solutions": (a) to use IDLE with the -n switch whenever *interactive* turtle graphics is needed. This is rather easy, as opening IDLE for editing a given Python program (at least under Windows) opens it automatically in this -n - switch - mode. I for my part work with two different links to IDLE on my desktop, normal mode and "no subprocesses" mode, also in my classes. (b) one could try to use the approach of John Zelle, which he did in his graphics package, namely to let the drawing do in a separate thread. I don't know if this is easily possible with the animated drawing turtles - perhaps one should produce a prototype to see ... (Guido two or three years ago told me, that Tkinter is not threadsave) (c) I'd propose to add a sort of TurtleCanvas class to the turtle module. (You will observe that Xturtle works with a scrolled canvas due to a comment in the source code of good old turtle.py, which asked for that ;-) ). There are simply several canvas oriented commands (like setbg etc.) To implement them as Pen (= Turtle) methods doesn't make sense. Also resizing the canvas would be a useful candidate (?). (d) I'll add one more question as an example: turtle.py has the function width() which sets the thickness of the lines to draw. There is no function to "get" it. In Xturtle.py I've implemented pensize() (with width() as an alias) in a way thatit can be used to set the pensize, when called with an argument and to return the current pensize when called without arguments. Would you like this or would you prefer get- and set- functions() for each property? What is the "more pythonic" way? There are many functions concerning pen-properties where this problem arises. They should be treated uniformly.
I'll close for now. Only a few remarks to the following:
So I think the following would be handy:
1. equally usable with either "import * from turtle" or "import turtle" imports
I think this is possible currently . What do you meadn exactly? Something like "from turtle import Pen"?
2. should open with a window covering at least half the screen (the current default is too small to be useful)
Xturtle.py does so
3. should offer some simple configuration choices for things like initial size and shape, but mostly rely on reasonable defaults
ok, easy to do
4. should offer a class wrapper so that that one could easily instantiate different turtles for a first experience with objects.
I don't understand this question. Currently there are the classes Pen and RawPen in th turtle module. The anonymous turtle is in fact an instance of Pen (named _pen). It is easy to uses several turtles at the same time.
5. some minor tweaks to make it better behaved when run from IDLE
I fear, these will become major tweaks ...
Does anyone have any feedback on these ideas or any other suggestions about how turtle.py might be improved without being fundamentally changed?
Note: this is about turtle.py only, for all its deficiencies. Any suggestions to try another library, system, or language will be cheerfully, but resolutely, ignored. ;)
OK - Xturtle uses no other library, system nor language - so please do not ignore it - not even resolutely ;-)
Regards Gregor
P.S.: Xturtle is here, along with its example programs:
http://ada.rg16.asn-wien.ac.at/~python/Xturtle/
Cheers, Vern Ceder
------------------------------------------------------------------------
2006-03-01
Xturtle.py is the prototype of a turtle module written in Python. It is intended to serve as a first proposition what functions and features I consider to be useful in a turtle module and what can easily be done in Python with Tkinter.
Starting point was the turtle module contained in the current Python distribution. To a far extent this eXperimental turtle module is compatible with turtle.py.
The code is typical experimental. I'm currently doing a complete rewrite, which I expect to be in a state of a "pre-alpha-release" within about two weeks.
In the meantime there is much to discuss - see my posting on Python Edu-Sig.
The Xturtle-package contains
1. the Xturtle.py module (eXperimental turtle module) 2. this document - mainly to discribe the 3. set of included examples 4. A documentation containing a description of (nearly) all classes and functions contained in the module - written in German language :-( Nevertheless it may be useful for you, as you can see which functions with which parameter-lists are provided. And the function names are English anyway. It is in rtf-format
(At least I've translated most of the texts occuring in the sample programs.)
================= Important remark! =================
To do interactive turtle-graphics from IDLE, you have to run IDLE with the -n-switch (No subprocesses!)
If you do so, your turtle-graphics programs must not contain a mainloop() call.
There is only one example (Xplotter.py) which I recommend to use with IDLE in this way. Interestingly in Windows you can achieve this by opening the Python program by right-clicking with the mouse and chosing Edit with IDLE. Then press F5 from the active editor - window to run the program. After the program has been run, you can give additional graphics-commands from the IDLE shell window, if you want and modify the graphics to your liking.
=========================================================== List of example-programs. Under Windows you can run them by double-clicking them in the windows explorer. Xturtle.py must be on the search path for modules. E.G. in the same directory as the examples or in the directory where turtle.py lives. ===========================================================
There are examples from elementary to more elaborated. Some of them I used for my teaching, some only to demonstrate what can be done with turtle.py They are not intended to serve as examples for *optimal* solutions.
0. Xturtle.py has a if __name__== "__main__" demo: So simply start it. First you see the demo from turtle.py to demonstrate compatibility, then you can observe some Xturtle features.
1. radioactive.py paints radioactivity-sign if you import turtle instaed of Xturtle, the program display a subtle bug of turtle.py program essentially written by one of my students
2. yinyang.py displays a yin-yang symbol try also with turtle instead of Xturtle
3. Xyinyang.py same as yinyang.py, but uses some (few) features of Xturtle
4. sierpinsky.py and Xsierpinsky.py: two coloured sierpinsky-triangles, one for turtle, the other one for Xturtle
5. Xcurlicues.py display three of the curlicues described by Ian Stuart in his book "Another Fine Math You've Got Me Into ..." --- very well suited for turtle graphics. After the third graphic has been displayed, shut the graphics window. (The third one can only be generated thus easily with a language with long integer arithmetics.)
6. Xtree.py displays a typical binary tree as done so often with turtle graphics, BUT this time done with a Python generator. As a result the tree is displayed the breadth-first-way.
7. Xforest.py elaborates the idea from 6.
8. Xhangman.py This is from my book "Python für Kids" - only turtle replaced by Xturtle. Compatibility-check. (You can do the reverse and see, that it also runs with turtle.py)
9. Xmoorhuhn.py is a well known action game. Uses three gifs contained in the directory. Only for people accustomed to this type of games. (I normally achieve a hit rate of 0.25 :-( )
10. Xgame2 is a very strange game, which I invented for demo purposes. It is an event driven program for two players. There are two turtles on the screen. One of them is governed by mouseclicks (left, middle, right), the other one by keypresses (arrow-keys: left/up/right) One of them is red (the hunter), the other one - blue - is the prey (i.e. to be cought). The role of the turtles - and accordingly their color - changes randomly. So while it's fin to be far away, if you are hunted, it's not so fine if you suddenly become the hunter ....
11. Xspaceship is intended as a learning game. There is a spaceship in space without gravity. It has to be led to a target by simulated rocket propulsion. Start the game and again use three arrow-keys to move it around. But be aware, that you only can stop it by turning it 180 degrees and "accelerate" it in the opposite direction .... Students like it ...
12. mill1.py - doubleclick and look. A very simple animation.
mill2.py - doubleclick and look. Another animation. Wait a little, it will develop differently.
These two programs use an experimental feature, which is not documented: userdefined turtle-shapes.
==================================================
13. Xplotter.py === USE THIS IN INTERACTIVE MODE e.g. by rightclicking and chosing Edit with IDLE.
run it. It is intended to show the relation between a function and its derivative.
Click several times into the graphics window. If you have learned enough about the graphs shown type
>>> plot(fun, -1, 2.5)
(there is a function fun defined in the script)
or define and display your own functions (along with their derivatives)
===================================================
-- This time for sure! -Bullwinkle J. Moose ----------------------------- Vern Ceder, Director of Technology Canterbury School, 3210 Smith Road, Ft Wayne, IN 46804 vceder@canterburyschool.org; 260-436-0746; FAX: 260-436-5137

Hi all, Apparently XturtlePkg.ZIP is to large(or wrong format) to be sent over the Edu-SIG list, so if you want to try it out, you are bound to use the mentioned link http://ada.rg16.asn-wien.ac.at/~python/Xturtle/ to download it. Regards, Gregor Gregor Lingl schrieb:
Vern Ceder schrieb:
Hello everyone,
...
_______________________________________________ Edu-sig mailing list Edu-sig@python.org http://mail.python.org/mailman/listinfo/edu-sig
-- Gregor Lingl Reisnerstrasse 3/19 A-1030 Wien Telefon: +43 1 713 33 98 Mobil: +43 664 140 35 27 Website: python4kids.net
participants (3)
-
Andre Roberge
-
Gregor Lingl
-
Vern Ceder