Python.use(better) #Tutor: step03 -- def __call__(self, widget):
‖記事一覧‖ Python.use(better)《Python3.1》《復刻版》
def __call__(self, widget):
《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28
基礎編で利用した学習ツールを作成する過程を通して「プログラミング」の理解を深めます。
※ Tcl/Tk で作成した例題を、Python3.1 で再構成しました。
事例:モジュールを起動する
事例:コードの解説
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( #1: "", 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()
■ #1: 特殊メソッド __call__
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)
特殊メソッド __call__ は、メソッド呼び出し () に呼応して、その動作を規定します。
- メソッド curselection を利用して、選択した項目のオフセット値(文字列)が得られます。
- メソッド delete を利用して、指定した範囲のテキストを削除します。
- メソッド insert を利用して、指定した位置にテキストを挿入します。
■ #2: Listbox の動作を規定する
widget = Listbox(frame, font="courier 12") ... widget.bind( #1: "", lambda *args: self(widget), )
- メソッド bind を利用して、リスト widget を選択したときの動作を規定できます。
引数 "
- ダブルクリックしたときに self(widget) が呼び出され、特殊メソッド __call__ に帰結します。
特殊メソッド __call__ では、実引数 widget を介して、Listbox を参照できます。
》こちらに移動中です《
↑TOP