Python tkinter GUI プログラミング Treeview

 今日も見に来てくださって、ありがとうございます。石川さんです。

 今日は、Treeviewについて調べてプログラミングしてみました。Treeviewには二種類の見せ方があって、headingstreeです。それぞれ上下に実装してみました。

できあがりイメージ

Treeviewの実装サンプル(showの二つのモード、上がheadings、下がtree)

ソースコード

import tkinter as tk
import tkinter.ttk as ttk

class Application(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("ttk Treeview Widget example headings/tree")
        
        lf1 = tk.LabelFrame(self, text="headings")
        lf1.grid(row=0,column=0, padx=10,pady=10)
        headings = {"#1":"名前", "#2":"型", "#3":"サイズ"}
        self.treeview = ttk.Treeview(lf1, columns=headings.keys(), show="headings")
        self.treeview.pack(side=tk.LEFT, fill=tk.BOTH, expand=True,padx=10,pady=10)
        self.scroll = ttk.Scrollbar(lf1, command=self.treeview.yview)
        self.treeview.configure(yscroll=self.scroll.set)
        self.scroll.pack(side=tk.LEFT, fill=tk.BOTH, pady=10)
        
        for key, item in headings.items():
            self.treeview.heading(key, text=item)
            
        self.treeview.column("#1", width=500)
        
        self.treeview.insert("",tk.END, values=("head_information","dict","3"))
        self.treeview.insert("", tk.END, values=("tooltip_text","str","1"))
        
        lf2 = tk.LabelFrame(self, text="tree")
        lf2.grid(row=1,column=0, stick=tk.W, padx=10, pady=10)
        style = ttk.Style(lf2)
        style.configure('Treeview', rowheight=30)
        self.treeview2 = ttk.Treeview(lf2, show="tree")
        self.treeview2.heading("#0", text="tree view version", anchor=tk.W)
        self.treeview2.pack(padx=10, pady=10)
        parent1 = self.treeview2.insert("", tk.END,text="head_information")
        self.treeview2.insert(parent1, tk.END, text="dict")
        self.treeview2.insert(parent1, tk.END, text="3")
        parent2 = self.treeview2.insert("", tk.END, text="tooltip_text")
        self.treeview2.insert(parent2, tk.END, text="str")
        self.treeview2.insert(parent2, tk.END, text="1")
        
if __name__ == "__main__":
    application = Application()
    application.mainloop()

詳細説明

 9行目と26行目でLabelFrame()を作成しています。それぞれheadings用と、tree用に準備しました。12行目でshow="headings"オプションをつけたTreeviewを作成しています。columnsオプションでカラムを指定しています。

 19行目のheadings()メソッドで、項目のヘッダ部分のテキストを設定しています。21行目でヘッダ項目の幅をセットしています。

 headingsを指定することで、このような表形式でデータを扱うことができます。

 30行目で、show="tree"オプションを付けたTreeviewを作成しています。フォルダ階層などのツリー形式のデータを表現することができます。

まとめ

 headingsオプションを使ったTreeviewは、データベーステーブルからデータを取得して一覧を作成するときなどに、使えそうですね。treeオプションの方は、フォルダ階層以外にもプログラム構成や、組織構造など、幅広く使えそうです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.