Python.use(better) #Tutor: step05 -- def create_Scrollbar(self, master, listbox, orient)
‖記事一覧‖ Python.use(better)《Python3.1》《復刻版》
def create_Scrollbar(self, master, listbox, orient)
《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第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() ... 5: step05 -- def create_Scrollbar(self, master, listbox, orient):
事例:コードの解説
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 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
■ #1: メソッド __init__
def __init__(self, master, target): ... 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 )
格子を使って、任意の widget を配置できます。
- 縦方向 NS にスクロールバー y を配置します。
■ #2: 格子を再構成する
def create_Frame(self, master): ... widget.rowconfigure (0, weight=1) widget.columnconfigure(0, weight=1)
メソッド rowconfigure は、指定した格子「行」を再構成します。
- 0 番目の格子「行」を再構成します。
引数 columnconfigure は、指定した格子「列」を再構成します。
- 0 番目の格子「列」を再構成します。
引数 weight= には、重み付けの係数を指定します。この値に従って、外部部品の大きさが変化(拡大/縮小)したときの量に対して、内部格子の大きさ(幅/高さ)をどの割合で変化させるかが決まります。
@ここでは、ウィンドウを操作したときに、下側のスクロールバーは水平方向だけに、右側のスクロールバーは垂直方向だけに、その大きさが変化するように設定しています。
■ #3: クラス Listbox
def create_controller(self, master, target): ... widget = Listbox(master, font="courier 12") ... return widget
生成した Listbox をリターン値にします。
■ #4: クラス Scrollbar
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
部品の操作に合わせてスクロールバーを再表示するには、テキスト部品 Text をスクロールバー Scrollbar に関係付けておきます。
- xscrollcommand= に、Scrollbar の再表示を促すメソッド set を設定します。すると、テキスト部品を操作してイベントが発生したときに、コールバック xscrollcommand を介して set が起動されます。
- yscrollcommand= についても、同様です。
スクロールバーの操作に合わせて部品を再表示するには、スクロールバー Scrollbar をテキスト部品 Text に関係付けておきます。
- command= に、Text の再表示を促すメソッド xview を設定します。すると、スクロールバーを操作してイベントが発生したときに、コールバック command を介して xview が起動されます。
- yview についても、同様です。
》こちらに移動中です《
↑TOP