Python.use(better) #課題:Tutor《source code》

記事一覧 Python.use(better)《Python3.1》

《余録》課題:Tutor 《source code》

《著》森こねこ、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28

基礎編で利用した学習ツールを作成する過程を通して「プログラミング」の理解を深めます。
※ Tcl/Tk で作成した例題を、Python3.1 で再構成しました。

課題:ソースコード


#! /usr/bin/env python
# coding: utf-8
## ----------------------------------------
##
## (C) Copyright 2000-2009, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
##
## ----------------------------------------
# ..+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
"""
>>> None

>>> ## ----------------------------------------
>>> None
version: #1.0.30
"""
## ----------------------------------------
from list_Tips import *
target = list

from tkinter import *

## ----------------------------------------
def step00():
    """Tk()"""

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("200x150")
        root.mainloop()

    tips()

## ----------------------------------------
def step01():
    """class Tutor(object):"""

    class Tutor(object):
        def __init__(self, master):
            self.create_help(master)

        def create_help(self, master):
            frame = Frame(master)
            frame.pack()
            widget = Text(frame, bg="aliceblue", height=3)
            widget.pack()

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("200x150")
        Tutor(master=root)                      #@:
        root.mainloop()

    tips()

## ----------------------------------------
def step02():
    """def create_controller(self, master, target):"""

    class Tutor(object):
        def __init__(self, master, target):
            self.create_help(master)
            self.create_controller(master, target)  #@:

        ## ----------------------------------------
        def create_help(self, master):
            frame = Frame(master)
            frame.pack()
            widget = Text(frame, bg="aliceblue", height=3)
            widget.pack()

        def create_controller(self, master, target):
            s = dir(target)

            frame = Frame(master)
            frame.pack(fill=BOTH, expand=True)

            widget = Listbox(frame, font="courier 12")
            widget.pack(fill=BOTH, expand=True)

            for e in s:
                widget.insert(END, e)            

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("200x150")
        Tutor(master=root, target=target)       #@:
        root.mainloop()

    tips()

## ----------------------------------------
def step03():
    """def __call__(self, widget):"""

    class Tutor(object):
        def __init__(self, master, target):
            self.help = self.create_help(master)    #@:
            self.create_controller(master, target)

        def __call__(self, widget):
            s,*_ = widget.curselection()
            s = self.items[int(s)]
            view = self.help
            view.delete(1.0, END)
            view.insert(END, "%s"%s)

        ## ----------------------------------------
        def create_help(self, master):
            frame = Frame(master)
            frame.pack()
            widget = Text(frame, bg="aliceblue", height=3)
            widget.pack()
            return widget                           #@:

        def create_controller(self, master, target):
            self.items = s = dir(target)

            frame = Frame(master)
            frame.pack(fill=BOTH, expand=True)

            widget = Listbox(frame, font="courier 12")
            widget.pack(fill=BOTH, expand=True)
            widget.bind(                            #@:
                "",
                lambda *args: self(widget),
                )

            for e in s:
                widget.insert(END, e)            

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("200x150")
        Tutor(master=root, target=target)
        root.mainloop()

    tips()

## ----------------------------------------
def step04():
    """def create_Frame(self, master):"""

    class Tutor(object):
        def __init__(self, master, target):
            self.help = self.create_help(master)
            frame = self.create_Frame(master)       #@:
            self.create_controller(frame, target)

        def __call__(self, widget):
            s,*_ = widget.curselection()
            s = self.items[int(s)]
            view = self.help
            view.delete(1.0, END)
            view.insert(END, "%s"%s)

        ## ----------------------------------------
        def create_help(self, master):
            frame = Frame(master)
            frame.pack()
            widget = Text(frame, bg="aliceblue", height=3)
            widget.pack()
            return widget

        def create_Frame(self, master):
            widget = Frame(master)
            widget.pack(fill=BOTH, expand=True)
            return widget

        def create_controller(self, master, target):
            self.items = s = dir(target)

            widget = Listbox(master, font="courier 12")
            widget.pack(fill=BOTH, expand=True)
            widget.bind(
                "",
                lambda *args: self(widget),
                )

            for e in s:
                widget.insert(END, e)            

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("200x150")
        Tutor(master=root, target=target)
        root.mainloop()

    tips()

## ----------------------------------------
def step05():
    """def create_Scrollbar(self, master, listbox, orient):"""

    class Tutor(object):
        def __init__(self, master, target):
            self.help = self.create_help(master)
            frame = self.create_Frame(master)
            w = self.create_controller(frame, target)   #@:
            y = self.create_Scrollbar(frame, w, VERTICAL)
            w.grid(row=0, column=0, sticky=NSEW)
            y.grid(row=0, column=1, sticky=NS  )

        def __call__(self, widget):
            s,*_ = widget.curselection()
            s = self.items[int(s)]
            view = self.help
            view.delete(1.0, END)
            view.insert(END, "%s"%s)

        ## ----------------------------------------
        def create_help(self, master):
            frame = Frame(master)
            frame.pack()
            widget = Text(frame, bg="aliceblue", height=3)
            widget.pack()
            return widget

        def create_Frame(self, master):
            widget = Frame(master)
            widget.rowconfigure   (0, weight=1)
            widget.columnconfigure(0, weight=1)
            widget.pack(fill=BOTH, expand=True)
            return widget

        def create_controller(self, master, target):
            self.items = s = dir(target)

            widget = Listbox(master, font="courier 12")
            widget.pack(fill=BOTH, expand=True)
            widget.bind(
                "",
                lambda *args: self(widget),
                )

            for e in s:
                widget.insert(END, e)
            return widget
        
        ## ----------------------------------------
        def create_Scrollbar(self, master, listbox, orient):
            position = {        # resource
                HORIZONTAL: "x",
                VERTICAL  : "y",
                }
            xy = position[orient]

            widget = Scrollbar(master, orient=orient)
            widget.config(command=getattr(listbox, "%sview"%xy))
            listbox["%sscrollcommand"%xy] = widget.set
            return widget

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("200x150")
        Tutor(master=root, target=target)
        root.mainloop()

    tips()

## ----------------------------------------
def step06():
    """def create_view(self, master):"""

    class Tutor(object):
        def __init__(self, master, target):
            self.help = self.create_help(master)
            frame = self.create_Frame(master)

            w = self.create_controller(frame, target)
            y = self.create_Scrollbar(frame, w, VERTICAL)
            w.grid(row=0, column=0, sticky=NSEW)
            y.grid(row=0, column=1, sticky=NS  )

            w = self.create_view(frame)
            x = self.create_Scrollbar(frame, w, HORIZONTAL)
            y = self.create_Scrollbar(frame, w, VERTICAL  )
            w.grid(row=0, column=2, sticky=NSEW)
            x.grid(row=1, column=2, sticky=EW  )
            y.grid(row=0, column=3, sticky=NS  )

        def __call__(self, widget):
            s,*_ = widget.curselection()
            s = self.items[int(s)]
            view = self.help
            view.delete(1.0, END)
            view.insert(END, "%s"%s)

        def create_help(self, master):
            frame = Frame(master)
            frame.pack()
            widget = Text(frame, bg="aliceblue", height=3)
            widget.pack()
            return widget

        def create_Frame(self, master):
            widget = Frame(master)
            widget.rowconfigure   (0, weight=1)
            widget.columnconfigure(2, weight=2)     #@:
            widget.pack(fill=BOTH, expand=True)
            return widget

        def create_controller(self, master, target):
            self.items = s = dir(target)

            widget = Listbox(master, font="courier 12")
            widget.pack(fill=BOTH, expand=True)
            widget.bind(
                "",
                lambda *args: self(widget),
                )

            for e in s:
                widget.insert(END, e)
            return widget
        
        def create_view(self, master):
            widget = Text(master, bg="ivory", wrap=NONE)
            return widget

        ## ----------------------------------------
        def create_Scrollbar(self, master, listbox, orient):
            position = {        # resource
                HORIZONTAL: "x",
                VERTICAL  : "y",
                }
            xy = position[orient]

            widget = Scrollbar(master, orient=orient)
            widget.config(command=getattr(listbox, "%sview"%xy))
            listbox["%sscrollcommand"%xy] = widget.set
            return widget

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("200x150")
        Tutor(master=root, target=target)
        root.mainloop()

    tips()

## ----------------------------------------
def step07():
    """def do_help(self, view, target, item):"""

    class Tutor(object):
        def __init__(self, master, target):
            self.help = self.create_help(master)
            frame = self.create_Frame(master)

            w = self.create_controller(frame, target)
            x = self.create_Scrollbar(frame, w, VERTICAL)
            w.grid(row=0, column=0, sticky=NSEW)
            x.grid(row=0, column=1, sticky=NS  )

            w = self.create_view(frame)
            x = self.create_Scrollbar(frame, w, HORIZONTAL)
            y = self.create_Scrollbar(frame, w, VERTICAL  )
            w.grid(row=0, column=2, sticky=NSEW)
            x.grid(row=1, column=2, sticky=EW  )
            y.grid(row=0, column=3, sticky=NS  )

        def __call__(self, widget, target):         #@:
            s,*_ = widget.curselection()
            s = self.items[int(s)]
            self.do_help(self.help, target, s)

        def do_help(self, view, target, item):
            view.delete(1.0, END)
            s = eval("%s.%s.__doc__"%(target.__name__, item))
            view.insert(END, "%s"%s)

        ## ----------------------------------------
        def create_help(self, master):
            frame = Frame(master)
            frame.pack()
            widget = Text(frame, bg="aliceblue", height=3)
            widget.pack()
            return widget

        def create_Frame(self, master):
            widget = Frame(master)
            widget.rowconfigure   (0, weight=1)
            widget.columnconfigure(2, weight=2)
            widget.pack(fill=BOTH, expand=True)
            return widget

        def create_controller(self, master, target):
            self.items = s = dir(target)

            widget = Listbox(master, font="courier 12")
            widget.pack(fill=BOTH, expand=True)
            widget.bind(
                "",
                lambda *args: self(widget, target), #@:
                )

            for e in s:
                widget.insert(END, e)
            return widget
        
        def create_view(self, master):
            widget = Text(master, bg="ivory", wrap=NONE)
            return widget

        ## ----------------------------------------
        def create_Scrollbar(self, master, listbox, orient):
            position = {        # resource
                HORIZONTAL: "x",
                VERTICAL  : "y",
                }
            xy = position[orient]

            widget = Scrollbar(master, orient=orient)
            widget.config(command=getattr(listbox, "%sview"%xy))
            listbox["%sscrollcommand"%xy] = widget.set
            return widget

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("200x150")
        Tutor(master=root, target=target)       #@:
        root.mainloop()

    tips()

## ----------------------------------------
def step08():
    """def do_test(self, view, target, item):"""

    class Tutor(object):
        def __init__(self, master, target):
            self.help = self.create_help(master)
            frame = self.create_Frame(master)

            w = self.create_controller(frame, target)
            x = self.create_Scrollbar(frame, w, VERTICAL)
            w.grid(row=0, column=0, sticky=NSEW)
            x.grid(row=0, column=1, sticky=NS  )

            self.view = w = self.create_view(frame)
            x = self.create_Scrollbar(frame, w, HORIZONTAL)
            y = self.create_Scrollbar(frame, w, VERTICAL  )
            w.grid(row=0, column=2, sticky=NSEW)
            x.grid(row=1, column=2, sticky=EW  )
            y.grid(row=0, column=3, sticky=NS  )

        def __call__(self, widget, target):
            s,*_ = widget.curselection()
            s = self.items[int(s)]
            self.do_help(self.help, target, s)
            self.do_test(self.view, target, s)      #@:

        def do_help(self, view, target, item):
            view.delete(1.0, END)
            s = eval("%s.%s.__doc__"%(target.__name__, item))
            view.insert(END, "%s"%s)

        def do_test(self, view, target, item):
            view.delete(1.0, END)
            spec = target.__name__, item
            view.insert(END, "%s.%s"%spec)

        ## ----------------------------------------
        def create_help(self, master):
            frame = Frame(master)
            frame.pack()
            widget = Text(frame, bg="aliceblue", height=3)
            widget.pack()
            return widget

        def create_Frame(self, master):
            widget = Frame(master)
            widget.rowconfigure   (0, weight=1)
            widget.columnconfigure(2, weight=2)
            widget.pack(fill=BOTH, expand=True)
            return widget

        def create_controller(self, master, target):
            self.items = s = dir(target)

            widget = Listbox(
                master,
                width=max(len(e) for e in s),       #@:
                font="courier 12",
                )
            widget.pack(fill=BOTH, expand=True)
            widget.bind(
                "",
                lambda *args: self(widget, target),
                )

            for e in s:
                widget.insert(END, e)
            return widget
        
        def create_view(self, master):
            widget = Text(master, bg="ivory", wrap=NONE)
            return widget

        ## ----------------------------------------
        def create_Scrollbar(self, master, listbox, orient):
            position = {        # resource
                HORIZONTAL: "x",
                VERTICAL  : "y",
                }
            xy = position[orient]

            widget = Scrollbar(master, orient=orient)
            widget.config(command=getattr(listbox, "%sview"%xy))
            listbox["%sscrollcommand"%xy] = widget.set
            return widget

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("250x150")                #@:
        Tutor(master=root, target=target)
        root.mainloop()

    tips()

## ----------------------------------------
def step09():
    """def eval_tips(self, view, target, item):"""

    class Tutor(object):
        def __init__(self, master, target):
            self.help = self.create_help(master)
            frame = self.create_Frame(master)

            w = self.create_controller(frame, target)
            x = self.create_Scrollbar(frame, w, VERTICAL)
            w.grid(row=0, column=0, sticky=NSEW)
            x.grid(row=0, column=1, sticky=NS  )

            self.view = w = self.create_view(frame)
            x = self.create_Scrollbar(frame, w, HORIZONTAL)
            y = self.create_Scrollbar(frame, w, VERTICAL  )
            w.grid(row=0, column=2, sticky=NSEW)
            x.grid(row=1, column=2, sticky=EW  )
            y.grid(row=0, column=3, sticky=NS  )

        def __call__(self, widget, target):
            s,*_ = widget.curselection()
            s = self.items[int(s)]
            self.do_help(self.help, target, s)
            self.do_test(self.view, target, s)

        def do_help(self, view, target, item):
            view.delete(1.0, END)
            s = eval("%s.%s.__doc__"%(target.__name__, item))
            view.insert(END, "%s"%s)

        ## ----------------------------------------
        def do_test(self, view, target, item):
            view.delete(1.0, END)
            try:
                self.eval_tips(view, target, item)  #@:
            except NameError:
                s = "*** None ***"
                view.insert(END, "%s"%s)

        def eval_tips(self, view, target, item):
            temp_file = "zoo.txt"

            save = sys.stdout                       # with context

            sys.stdout = open(temp_file,"w+")
            spec = target.__name__
            eval("ex_%s(spec,None)"%item)

            sys.stdout = save                       # with context
            self.log(view, open(temp_file,"r"))

        def log(self, view, file):
            for e in file:
                view.insert(END, "%s"%e)

        ## ----------------------------------------
        def create_help(self, master):
            frame = Frame(master)
            frame.pack()
            widget = Text(frame, bg="aliceblue", height=3)
            widget.pack()
            return widget

        def create_Frame(self, master):
            widget = Frame(master)
            widget.rowconfigure   (0, weight=1)
            widget.columnconfigure(2, weight=2)
            widget.pack(fill=BOTH, expand=True)
            return widget

        def create_controller(self, master, target):
            self.items = s = dir(target)

            widget = Listbox(
                master,
                width=max(len(e) for e in s),       #@:
                font="courier 12",
                )
            widget.pack(fill=BOTH, expand=True)
            widget.bind(
                "",
                lambda *args: self(widget, target),
                )

            for e in s:
                widget.insert(END, e)
            return widget
        
        def create_view(self, master):
            widget = Text(master, bg="ivory", wrap=NONE)
            return widget

        def create_Scrollbar(self, master, listbox, orient):
            position = {            # resource
                HORIZONTAL: "x",
                VERTICAL  : "y",
                }
            xy = position[orient]

            widget = Scrollbar(master, orient=orient)
            widget.config(command=getattr(listbox, "%sview"%xy))
            listbox["%sscrollcommand"%xy] = widget.set
            return widget

    ## ----------------------------------------
    def tips():
        root = Tk()
        root.title("builtins: %s"%target.__name__)
        root.geometry("400x200")
        Tutor(master=root, target=target)
        root.mainloop()

    tips()

## ========================================
s = "step"
DIR = [e for e in dir() if e.startswith(s)]
DIR = dict((i,e) for i,e in enumerate(DIR))
DIR = list(DIR.items()); DIR.sort()

def ex():
    n = len("%d"%(len(DIR)-1))
    for k,v in DIR:
        source = '''
x = eval("%%s.__doc__"%%v)
print("%%%dd: %%s -- %%s"%%(k,v,x))
'''%n
        eval(compile(source,"","exec"))

def do_all():
    for k,v in DIR: do(k)

def do(k=None):
    if k is None: ex(); return
    try:
        k,v = DIR[k]
        print(">>> #","-"*50,v)
        eval("%s()"%v)
    except IndexError:
        print("(x_x) too bad ... %s"%k)

## ----------------------------------------
from time import ctime

def time_stamp():
    print("="*24)
    print(ctime())
    print("="*24)

## ----------------------------------------
from doctest import testmod

if __name__=='__main__':
    time_stamp()
    testmod()

## ========================================

TOP


関連記事

Last updated♪2009/12/04