Python.use(better, Tkinter=”GoF”) # Visitor #2
‖記事一覧‖ Python.use(better)《Python3.1》
《著》森こねこ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
α版♪1993/11/25 ● β版♪1995/11/22 ● 第1版♪2003/05/23
事例:コードの解説
■ TreeWidget
## ----------------------------------------
class TreeWidget(object):
クラス TreeWidget では、共通するプロトコルを規定します。
def __init__(self, tree=None, path=None, **keys): self.items = [] self.top = self.create_Toplevel(tree=tree) self.widget = self.create_widget(master=self.top, tree=tree)
メソッド __init__ では、さまざまなインスタンス属性を初期設定します。
def create_Toplevel(self, tree): widget = Toplevel() s = tree.path.split("/") title = "%s: %s"%(s[-1],"/".join(s[:-1])) widget.title(title) widget.config(padx=16, pady=4) return widget
メソッド create_Toplevel では、新たな Toplevel を生成して、それをリターン値にします。
■ ButtonTreeWidget
## ----------------------------------------
class ButtonTreeWidget(TreeWidget):
クラス ButtonTreeWidget では、コンポーネントを使ってツリーを表現します。
def __init__(self, tree=None, path=None, **keys): self.dirImage = PhotoImage(file="_image/folder.gif") self.fileImage = PhotoImage(file="_image/file.gif") super().__init__(tree, path) tree.accept_(TreeVisitor(self))
メソッド __init__ では、さまざまなインスタンス属性を初期設定します。
- tree に TreeVisitor を登録します。
def create_widget(self, master, tree): widget = Frame(master=master) widget.pack() return widget
メソッド create_widget では、新たな Frame を生成して、それをリターン値にします。
def append(self, master, tab, image, node):
bg = "aliceblue"
font = "courier 12"
side = LEFT
frame = Frame(master)
frame.config(bg=bg)
frame.pack(anchor=W)
Label(frame, text=tab , font=font ).pack(side=side)
ButtonInvoker(frame, image, receiver=node).pack(side=side)
Label(frame, text=node.item, font=font ).pack(side=side)
メソッド append では、新たな Frame を生成して、そこに他の部品を配置します。
■ TextTreeWidget
## ----------------------------------------
class TextTreeWidget(TreeWidget):
クラス TextTreeWidget では、文字列を使ってツリーを表現します。
def __init__(self, tree=None, path=None, **keys): super().__init__(tree, path) tree.accept_(TextVisitor(self))
メソッド __init__ では、さまざまなインスタンス属性を初期設定します。
- tree に TextVisitor を登録します。
def create_widget(self, master, tree): widget = Text(master=master, width=52) widget.pack() widget.insert(END, "%s\n"%tree.path) return widget
メソッド create_widget では、新たな Text を生成して、それをリターン値にします。
def append(self, string): self.widget.insert(END, string)
メソッド append では、widget の末尾に文字列 string を追加します。
■ アプリケーションを起動する
## ---------------------------------------- def tips(): root = Tk() root.title("Visitor") root.geometry("150x50") path = "Python-3.0/Mac/BuildScript" tips = TIPS(root, path) tips.createNodes() tree = TextTreeWidget(tree=tips.tree) tree = ButtonTreeWidget(tree=tips.tree) root.mainloop()
path の傘下にある、ディレクトリー/ファイルの階層構造を表現する、ツリーを表示します。
- TextTreeWidget は、文字列を使ってツリーを表現します。
- ButtonTreeWidget は、コンポーネントを使ってツリーを表現します。
↑TOP
関連記事
- INDEX《Tkinter》
- Python で学ぶ デザインパターンの世界《Tkinter》
- Let’s GoForward - GoF を反面教師に
- C# Design Patterns 31. The Visitor Pattern.
- Python.use(better, Tkinter=”GoF”)
Visitor
Last updated♪2009/11/02