|
|
TkDocs_Tk Tree. |
H.Kamifuji . |
ツリービューウィジェットは、アイテムの階層をブラウズすることを表示および許可することができ、各アイテムの1つ以上の属性をツリーの右側の列として表示することができます。 これにより、OS X FinderやWindows Explorer などのファイルマネージャに表示されるツリー表示に似たユーザーインターフェイスを構築できます。 ほとんどの Tk ウィジェットと同様に、幅広い状況で必要なときに動作する柔軟性があります。![]() perl Tkx : Treeviewウィジェットは、new_ttk__treeviewメソッドa.k.a. Tkx :: ttk__treeview()を使用して作成されます。 $tree = $parent->new_ttk__treeview;Python : ツリービューウィジェットは、ttk.Treeview関数を使用して作成されます: tree = ttk.Treeview(parent)水平スクロールバーと垂直スクロールバーは、必要に応じて通常の方法で追加できます。 |
ツリービューで便利なことをするには、1 つ以上の項目をツリービューに追加する必要があります。各項目は、リーフノードであろうと内部ノードであろうと、ツリー内の単一のノードを表します。アイテムは一意の ID で参照されます。これは、アイテムが最初に作成されたときにプログラマによって割り当てられるか、ウィジェットがアイテムの ID を自動的に選択することができます。 項目はツリービューの "insert" メソッドを使用してツリーに挿入することによって作成されます。アイテムを挿入するには、ツリーのどこに挿入するかを知る必要があります。これは、親アイテムを指定すること、および新しいアイテムを挿入する親の子のリストのどの位置を指定することを意味します。 ツリービューウィジェットは、追加したアイテムの第 1 レベルの親として機能することができる、"{}" (すなわち空の文字列)のIDを有するルートノード(表示されない)を自動的に作成する。親の子のリスト内の位置は、インデックスによって指定されます(0は最初のもので、特別な "end" インデックスはすべての既存の子の後に挿入することを意味します)。 通常、ツリーに表示される各項目の名前も指定します。名前の横にイメージを追加したり、ノードが開いているか閉じているかを指定するその他のオプションもあります。 perl Tkx : perl Tkx :アイテムを挿入すると、新しく作成されたアイテムのIDが返されます。 Python : # Inserted at the root, program chooses id: tree.insert('', 'end', 'widgets', text='Widget Tour') # Same thing, but inserted as first child: tree.insert('', 0, 'gallery', text='Applications') # Treeview chooses the id: id = tree.insert('', 'end', text='Tutorial') # Inserted underneath an existing node: tree.insert('widgets', 'end', text='Canvas') tree.insert(id, 'end', text='Tree')アイテムを挿入すると、新しく作成されたアイテムのIDが返されます。 |
ノード(およびその子孫があれば)は、ツリー内の別の場所に移動できます。 唯一の制限は、ノードをその子孫の1つの下に移動することができないことです。 ターゲットの場所は、 "insert" で行われたように、親を介して指定され、子のリストにインデックス付けされます。 perl Tkx : $tree->move("widgets", "gallery", "end"); # move widgets under galleryPython : tree.move('widgets', 'gallery', 'end') # move widgets under galleryアイテムはツリーから切り離すことができます。ツリーからアイテムとその子孫を削除しますが、アイテムを破棄することはなく、後で "move" でそれらを再挿入できます。 perl Tkx : $tree->detach("widgets");Python : tree.detach('widgets')アイテムも削除することができ、アイテムとその子孫を完全に削除します。 perl Tkx : $tree->delete("widgets");Python : tree.delete('widgets')階層をナビゲートするには、アイテムの親( "parent" )を見つけたり、アイテムの次のまたは前の兄弟( "next" および "prev" )を見つけたり、 アイテムの子のリスト( "children")。 "open" 項目設定オプションを変更することで、項目が開いているかどうかを制御したり、子を表示したりすることができます。 perl Tkx : $tree->item("widgets", -open => "true"); $isopen = $tree->item("widgets", "-open");Python : tree.item('widgets', open=TRUE) isopen = tree.item('widgets', 'open') |
ツリービューには、メインツリー表示の右側の列として表示される、各項目に関する 1 つまたは複数の追加情報も表示されます。 ここでも、各列は、割り当てた記号名で参照されます。 ツリービューウィジェットの "columns" 設定オプションを使用して、カラムのリストを指定することができます。最初にウィジェットを作成するとき、または後で設定します。 perl Tkx : $tree = $parent>->new_ttk__treeview(-columns => "size modified"); $tree->configure(-columns => "size modified owner");Python : tree = ttk.Treeview(root, columns=('size', 'modified')) tree['columns'] = ('size', 'modified', 'owner')列の幅、列内の項目情報の表示方法などを指定することができます。 表示するテキスト、オプションのイメージ、配置、アイテムがクリックされたときに呼び出されるスクリプト(ツリーのソートなど)など、列の見出しに関する情報を指定することもできます。 perl Tkx : $tree->column("size", -width => 100, -anchor => "center"); $tree->heading("size", -text => "Size");Python : tree.column('size', width=100, anchor='center') tree.heading('size', text='Size')各項目の各列に配置する値は、個別に指定するか、項目の値のリストを指定して指定することができます。 後者の場合、これは "values" 項目設定オプションを使用して行われます(したがって、最初に項目を挿入するとき、または後で使用することもできます)。 リストの順序は、 "columns" ウィジェット構成オプションの順序と同じでなければなりません。 perl Tkx : $tree->set("widgets", "size", "12KB"); $size = $tree->set("widgets", "size"); $tree->insert("", "end", -text => "Listbox", -values => "15KB Yesterday mark");Python : tree.set('widgets', 'size', '12KB') size = tree.set('widgets', 'size') tree.insert('', 'end', text='Listbox', values=('15KB Yesterday mark')) |
テキストウィジェットとキャンバスウィジェットのように、ツリービューウィジェットはタグを使用して、ツリー内のアイテムの外観を変更するのに役立ちます。 "tags" アイテム設定オプションを使用してアイテムのリストを割り当てることができます(アイテムの作成時または作成時)。 タグ設定オプションを指定すると、そのタグを持つすべての項目に適用されます。 有効なタグオプションには、 "foreground"(テ>キストカラー)、 "background"、 "font"、 "image"(アイテムが独自のイメージを指定している場合は使用されません)が含まれます。 また、タグにイベントバインディングを作成して、マウスのクリックやキーボードイベントなどをキャプチャすることもできます。 perl Tkx : $tree->insert("", "end", -text => "button", -tags => "ttk simple"); $tree->tag_configure("ttk", -background => "yellow"); $tree->tag_bind("ttk", "<1>", sub{itemClicked}); # the item clicked can be found via $tree->focusPython : tree.insert('', 'end', text='button', tags=('ttk', 'simple')) tree.tag_configure('ttk', background='yellow') tree.tag_bind('ttk', '<1>', itemClicked) # the item clicked can be found via tree.focus()ツリービューは仮想イベント "<TreeviewSelect>" 、 "<TreeviewOpen>" 、および "<TreeviewClose>" を生成し、ユーザーが作成したウィジェットの変更を監視できます。 "selection" メソッドを使用して現在の選択を判断することもできます(選択はプログラムから変更することもできます)。 |
カスタマイズ可能なツリービューウィジェットがどのように表示されるかについては、多くの側面があります。 アイテムのテキスト、フォントと色、列見出しの名前など、すでに見たことのあるものもあります。 ここにいくつか追加のものがあります。
|
use Tkx; $mw = Tkx::widget->new("."); $tree = $mw->new_ttk__treeview; # Inserted at the root, program chooses id: $tree->insert("", "end", -id => "widgets", -text => "Widget Tour"); # Same thing, but inserted as first child: $tree->insert("", "0", -id => "gallery", -text => "Applications"); # Treeview chooses the id: $id = $tree->insert("", "end", -text => "Tutorial"); # Inserted underneath an existing node: $tree->insert("widgets", "end", -text => "Canvas"); $tree->insert($id, "end", -text => "Tree"); $tree->g_grid(-column => 0, -row => 0, -padx => 5); # Tkx::after(2000, sub {$little->g_raise();}); Tkx::MainLoop();Windows10 : ![]() ![]() |
from tkinter import * from tkinter import ttk root = Tk() tree = ttk.Treeview(root) # Inserted at the root, program chooses id: tree.insert('', 'end', 'widgets', text='Widget Tour') # Same thing, but inserted as first child: tree.insert('', 0, 'gallery', text='Applications') # Treeview chooses the id: id = tree.insert('', 'end', text='Tutorial') # Inserted underneath an existing node: tree.insert('widgets', 'end', text='Canvas') tree.insert(id, 'end', text='Tree') tree.grid(column=0,row=0, padx=5, pady=5) # root.after(2000, lambda: little.lift()) root.mainloop()Linux : ![]() ![]() Windows10 : ![]() ![]() |
Tree |
|