[Python-checkins] cpython: Issue #22065: forward port the changes in c26862955342, update docstring with
terry.reedy
python-checkins at python.org
Fri Aug 15 06:39:46 CEST 2014
http://hg.python.org/cpython/rev/4349bbc21ca7
changeset: 92102:4349bbc21ca7
user: Terry Jan Reedy <tjreedy at udel.edu>
date: Fri Aug 15 00:39:04 2014 -0400
summary:
Issue #22065: forward port the changes in c26862955342, update docstring with
changes that were only merged into demohelp.txt, and re-delete demohelp.txt.
files:
Lib/turtledemo/__main__.py | 64 ++++++++++++++-----------
1 files changed, 36 insertions(+), 28 deletions(-)
diff --git a/Lib/turtledemo/__main__.py b/Lib/turtledemo/__main__.py
--- a/Lib/turtledemo/__main__.py
+++ b/Lib/turtledemo/__main__.py
@@ -2,9 +2,7 @@
"""
----------------------------------------------
-
- turtledemo - Help
-
+ turtleDemo - Help
----------------------------------------------
This document has two sections:
@@ -54,18 +52,34 @@
(2) How to add your own demos to the demo repository
- - place: same directory as turtledemo/__main__.py
+ - Place the file in the same directory as turtledemo/__main__.py
+ IMPORTANT! When imported, the demo should not modify the system
+ by calling functions in other modules, such as sys, tkinter, or
+ turtle. Global variables should be initialized in main().
- - requirements on source code:
- code must contain a main() function which will
- be executed by the viewer (see provided example scripts)
- main() may return a string which will be displayed
- in the Label below the source code window (when execution
- has finished.)
+ - The code must contain a main() function which will
+ be executed by the viewer (see provided example scripts).
+ It may return a string which will be displayed in the Label below
+ the source code window (when execution has finished.)
- !! For programs, which are EVENT DRIVEN, main must return
- !! the string "EVENTLOOP". This informs the viewer, that the
- !! script is still running and must be stopped by the user!
+ - In order to run mydemo.py by itself, such as during development,
+ add the following at the end of the file:
+
+ if __name__ == '__main__':
+ main()
+ mainloop() # keep window open
+
+ python -m turtledemo.mydemo # will then run it
+
+ - If the demo is EVENT DRIVEN, main must return the string
+ "EVENTLOOP". This informs the demo viewer that the script is
+ still running and must be stopped by the user!
+
+ If an "EVENTLOOP" demo runs by itself, as with clock, which uses
+ ontimer, or minimal_hanoi, which loops by recursion, then the
+ code should catch the turtle.Terminator exception that will be
+ raised when the user presses the STOP button. (Paint is not such
+ a demo; it only acts in response to mouse clicks and movements.)
"""
import sys
import os
@@ -96,14 +110,11 @@
return [entry[:-3] for entry in os.listdir(demo_dir) if
entry.endswith(".py") and entry[0] != '_']
-def showDemoHelp():
- view_text(demo.root, "Help on turtledemo", __doc__)
-
-def showAboutDemo():
- view_text(demo.root, "About turtledemo", about_turtledemo)
-
-def showAboutTurtle():
- view_text(demo.root, "About the turtle module.", turtle.__doc__)
+help_entries = ( # (help_label, help_doc)
+ ('Turtledemo help', __doc__),
+ ('About turtledemo', about_turtledemo),
+ ('About turtle module', turtle.__doc__),
+ )
class DemoWindow(object):
@@ -245,12 +256,10 @@
CmdBtn.pack(side=LEFT, padx='2m')
CmdBtn.menu = Menu(CmdBtn)
- CmdBtn.menu.add_command(label='About turtle.py', font=menufont,
- command=showAboutTurtle)
- CmdBtn.menu.add_command(label='turtleDemo - Help', font=menufont,
- command=showDemoHelp)
- CmdBtn.menu.add_command(label='About turtleDemo', font=menufont,
- command=showAboutDemo)
+ for help_label, help_file in help_entries:
+ def show(help_label=help_label, help_file=help_file):
+ view_text(self.root, help_label, help_file)
+ CmdBtn.menu.add_command(label=help_label, font=menufont, command=show)
CmdBtn['menu'] = CmdBtn.menu
return CmdBtn
@@ -323,7 +332,6 @@
def main():
- global demo
demo = DemoWindow()
demo.root.mainloop()
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list