#!/usr/bin/env python # -*-python-*- # Geoffrey Furnish # # A Python/Tk script to interactively run the various Python demos. # Append to effective python path so that can find plplot modules. import plplot_python_start # Python 2 name is Tkinter, Python 3 name is tkinter (sigh). import sys if sys.version_info[:2] >= (3, 0): from tkinter import * else: from Tkinter import * # According to the discussion at # # reload is just part of Python2, it is part of the imp module (deprecated as of # Python 3.4) for Python3 version < 3.4.0, and it is part of the importlib module # that is available for Python3 version >= 3.4.0 if sys.version_info[:3] < (3, 0, 0): pass elif sys.version_info[:3] < (3, 4, 0): from imp import reload else: from importlib import reload import Pltk_init import Plframe import restore import x00 import x01 import x02 import x03 import x04 import x05 import x06 import x07 import x08 import x09 import x10 import x11 import x12 import x13 ##import x14 ##import x15 import x16 ##import x17 import x18 ##import x19 class DemoApp(Frame): def __init__( s, master=None ): Frame.__init__( s, master ) #print("Building the Python Tk demo application main window.") s.create_widgets() s.pack( expand=1, fill=BOTH ) #plspause(1) def create_widgets(s): s.f = Frame(s) s.make_demo_bar( s.f ) #print("Time to register the plframe with the interp...") Pltk_init.Pltk_init( s.tk.interpaddr() ); s.plf = Plframe.PlXframe(s, width="17c", height="17c" ) s.f2 = Frame(s) s.f2.clone = Button( s.f2, text="Clone", command=s.clone ) s.f2.clone.pack( side=LEFT, expand=1, fill=X ) s.f2.reload = Button( s.f2, text="Reload", command=s.reload ) s.f2.reload.pack( side=LEFT, expand=1, fill=X ) s.f2.quit = Button( s.f2, text="Dismiss", command=s.master.destroy ) s.f2.quit.pack( side=LEFT, expand=1, fill=X ) s.f2.pack( side=BOTTOM, fill=X ) s.f.pack( side=LEFT ) s.plf.pack( side=RIGHT, expand=1, fill=BOTH ) def make_demo_bar( s, f ): f.x00 = Button( f, text="Example 0", command=s.demo_x00 ) f.x00.pack( expand=1, fill=X ) f.x01 = Button( f, text="Example 1", command=s.demo_x01 ) f.x01.pack( expand=1, fill=X ) f.x02 = Button( f, text="Example 2", command=s.demo_x02 ) f.x02.pack( expand=1, fill=X ) f.x03 = Button( f, text="Example 3", command=s.demo_x03 ) f.x03.pack( expand=1, fill=X ) f.x04 = Button( f, text="Example 4", command=s.demo_x04 ) f.x04.pack( expand=1, fill=X ) f.x05 = Button( f, text="Example 5", command=s.demo_x05 ) f.x05.pack( expand=1, fill=X ) f.x06 = Button( f, text="Example 6", command=s.demo_x06 ) f.x06.pack( expand=1, fill=X ) f.x07 = Button( f, text="Example 7", command=s.demo_x07 ) f.x07.pack( expand=1, fill=X ) f.x08 = Button( f, text="Example 8", command=s.demo_x08 ) f.x08.pack( expand=1, fill=X ) f.x09 = Button( f, text="Example 9", command=s.demo_x09 ) f.x09.pack( expand=1, fill=X ) f.x10 = Button( f, text="Example 10", command=s.demo_x10 ) f.x10.pack( expand=1, fill=X ) f.x11 = Button( f, text="Example 11", command=s.demo_x11 ) f.x11.pack( expand=1, fill=X ) f.x12 = Button( f, text="Example 12", command=s.demo_x12 ) f.x12.pack( expand=1, fill=X ) f.x13 = Button( f, text="Example 13", command=s.demo_x13 ) f.x13.pack( expand=1, fill=X ) f.x14 = Button( f, text="Example 14", command=s.demo_x14, state='disabled' ) f.x14.pack( expand=1, fill=X ) f.x15 = Button( f, text="Example 15", command=s.demo_x15, state='disabled' ) f.x15.pack( expand=1, fill=X ) f.x16 = Button( f, text="Example 16", command=s.demo_x16 ) f.x16.pack( expand=1, fill=X ) f.x17 = Button( f, text="Example 17", command=s.demo_x17, state='disabled' ) f.x17.pack( expand=1, fill=X ) f.x18 = Button( f, text="Example 18", command=s.demo_x18 ) f.x18.pack( expand=1, fill=X ) f.x19 = Button( f, text="Example 19", command=s.demo_x19, state='disabled' ) f.x19.pack( expand=1, fill=X ) # Others here. ## f.quit = Button( f, text="Quit", command=f.quit ) ## f.quit.pack( expand=1, fill=X ) ## A nice addition would be for these functions to not only call the ## demos, but to also stuff their source code into a text widget, so ## the user can easily see the correspondence between the source and ## the visual effects. def demo_x00(s): x00.main( s.plf ) restore.main( s.plf ) def demo_x01(s): x01.main( s.plf ) restore.main( s.plf ) def demo_x02(s): x02.main( s.plf ) restore.main( s.plf ) def demo_x03(s): x03.main( s.plf ) restore.main( s.plf ) def demo_x04(s): x04.main( s.plf ) restore.main( s.plf ) def demo_x05(s): x05.main( s.plf ) restore.main( s.plf ) def demo_x06(s): x06.main( s.plf ) restore.main( s.plf ) def demo_x07(s): x07.main( s.plf ) restore.main( s.plf ) def demo_x08(s): x08.main( s.plf ) restore.main( s.plf ) def demo_x09(s): x09.main( s.plf ) restore.main( s.plf ) def demo_x10(s): x10.main( s.plf ) restore.main( s.plf ) def demo_x11(s): x11.main( s.plf ) restore.main( s.plf ) def demo_x12(s): x12.main( s.plf ) restore.main( s.plf ) def demo_x13(s): x13.main( s.plf ) restore.main( s.plf ) def demo_x14(s): x14.main( s.plf ) restore.main( s.plf ) def demo_x15(s): x15.main( s.plf ) restore.main( s.plf ) def demo_x16(s): x16.main( s.plf ) restore.main( s.plf ) def demo_x17(s): x17.main( s.plf ) restore.main( s.plf ) def demo_x18(s): x18.main( s.plf ) restore.main( s.plf ) def demo_x19(s): x19.main( s.plf ) restore.main( s.plf ) def clone(s): "Make a new instance of this demo megawidget." take2 = DemoApp( Toplevel() ) pass def reload(s): """Reload all the demo modules. Facilitates modification of the demos, which is most useful during the period of implementing the demos in Python.""" reload( x00 ) reload( x01 ) reload( x02 ) reload( x03 ) reload( x04 ) reload( x05 ) reload( x06 ) reload( x07 ) reload( x08 ) reload( x09 ) reload( x10 ) reload( x11 ) reload( x12 ) reload( x13 ) ## reload( x14 ) ## reload( x15 ) reload( x16 ) ## reload( x17 ) reload( x18 ) ## reload( x19 ) # Let's also reload the Plframe module, so we can hack on that # freely too. #reload( Plframe ) # Doesn't work, don't know why. Grrr. demo = DemoApp() demo.mainloop()