Python.use(better) #Tutor: step08 -- def do_test(self, view, target, item)

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

def do_test(self, view, target, item)

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

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

事例:モジュールを起動する

■ 全項目を確認する

全ステップの「項目」を確認するには、関数 do を利用します。

$ python -i tutorTk.py
>>> do()
...
8: step08 -- def do_test(self, view, target, item):
■ 各項目を実行する

各ステップの「動作」を確認するには、関数 do に実引数を指定します。

>>> do(8)
>>> # -------------------------------------------------- step08

リスト領域の右側には、スクロールバーが現れます。

  • リスト領域(左下部)では、任意の項目を選択できます。
  • このとき、最大長の項目を表示するのに必要な長さ(幅)が確保されます。

任意の項目を選択(ダブルクリック)すると、

  • テキスト領域(上部)には、選択した項目に関連する情報が表示されます。
  • テキスト領域(右下部)には、選択した項目が表示されます。

事例:コードの解説

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

    class Tutor(object):
        ...
        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_test(self, view, target, item):
            view.delete(1.0, END)
            spec = target.__name__, item
            view.insert(END, "%s.%s"%spec)

        ## ----------------------------------------
        def create_controller(self, master, target):
            ...
            widget = Listbox(
                master,
                width=max(len(e) for e in s),       #@:
                font="courier 12",
                )
            ...
■ #1: 特殊メソッド __call__
        def __call__(self, widget, target):
            ...
            self.do_view(self.view, target, s)      #@:

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

特殊メソッド __call__ は、メソッド呼び出し () に呼応して、その動作を規定します。

  • メソッド delete を利用して、指定した範囲のテキストを削除します。
  • メソッド insert を利用して、指定した位置にテキストを挿入します。
■ #2: クラス Listbox
        def create_controller(self, master, target):
            ...
            widget = Listbox(
                master,
                width=max(len(e) for e in s),       #@:
                font="courier 12",
                )
            ...

リスト領域の幅 width= を、最大長の項目を表示するのに必要な長さに設定します。

  • 組み込み関数 max を利用すると、各項目の長さ len(e) の中から最大値が得られます。

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/12/11