Python.use(better) #課題:チューター《source code》
‖記事一覧‖ Python.use(better)《Python3.1》《復刻版》
《余録》課題:チューター《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_view(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_view(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_view(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_view(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): view.delete(1.0, END) 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