Tkinterでテーブルもどき
一覧表が欲しい
あるデータベースのようなものから、データを引き出してきて並べて表示したいものの、Tkinterにテーブルはないっぽいし、Frameにスクロールバーが付けれないから、長いデータを表示できないし?
テーブルのつくるライブラリもあるようだけど、いろいろと混ぜ込むことができない状況だったので、代替案がないか探していた。
StackOverFlowに似たようなことで頭抱えていたひとがいて、そこにコメントしてあった代替案がttkのTreeViewを使えばよいといことだったので、真似をしてみた。
以下、コードをメモ
コード
class TreeTable(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
# 定義
self.tree = ttk.Treeview(self, height=10)
self.scroll = tk.Scrollbar(self, orient=tk.VERTICAL, command=self.tree.yview)
# 設定
self.tree.configure(yscroll=self.scroll.set)
# 配置
self.tree.grid(row=0, column=0)
self.scroll.grid(row=0, column=1, sticky=tk.N+tk.S)
# ヘッダのうち、一番左の幅とテキストを設定
def setHeader(self, text, width):
self.tree.column("#0", width=width)
self.tree.heading("#0", text=text)
# ヘッダのうち、上記以外に幅とテキストを設定
def setColumns(self, texts, widths):
self.columns_key = ['C'+str(i) for i in xrange(len(texts))]
self.tree['columns'] = self.columns_key
for key, value, width in zip(self.columns_key, texts, widths):
self.tree.column(key, width=width)
self.tree.heading(key, text=value)
# 最初に一覧表に表示しておくデータを入力
def setInitialView(self, data_set):
for idx, v in enumerate(data_set):
self.tree.insert("", idx, text=str(idx), values=v)
self.idx = idx
# 一覧表にデータを追加する
def insertView(self, value):
self.idx += 1
self.tree.insert("", tk.END, text=str(self.idx), values=value)
項目の削除などは考えていないデス