TkinterのTreeviewで表を表示しています。
これをスクロールしたいです。ただ、諸事情によりスクロールバーを使わずボタンのみで実現したいです。
なんとなく次のように方法を考えました。
例えばウィンドウに5行表示されていて、次の行を表示したい場合、
表示されている最下行の次の行を取得して、次の行があれば次の行をウィンドウ上に表示されるようにtree.see()する。
ただ、この方法だとウィンドウに表示される行数列数が決まっている必要があり、適時取得できないと実現できないと思いました。
また、スクロールというよりは行列の位置を1行ずつまたは1列ずつ移動しているで、1クリックで大幅に表示位置が移動してしまうような気がしました。
ボタンでスクロールするいい方法があったら教えてほしいです。
下記のpush_button1(),push_button2(),push_button3(),push_button4()を押したときの処理について考えています。
Python
1from tkinter import ttk 2import tkinter as tk 3 4class App: 5 def __init__(self, win): 6 self.win = win 7 self.win.geometry("400x300") 8 self.create_view() 9 10 def create_view(self): 11 self.win.rowconfigure(tuple(range(2)), weight=1) 12 self.win.columnconfigure(tuple(range(2)), weight=1) 13 14 columns = 5 15 data = [] 16 for i in range(0, 100, 5): 17 data.append([i, i+1, i+2, i+3, i+4]) 18 self.tree = ttk.Treeview(self.win) 19 self.tree.grid(row=0, column=0, rowspan=2, columnspan=2, sticky="nsew", padx=5, pady=5) 20 self.tree["columns"] = tuple(range(1, columns + 1)) 21 self.tree["show"] = "headings" 22 w = self.win.winfo_width() 23 ww = int(w / 7) 24 for i in range(1, columns + 1): 25 self.tree.heading(i, text="Data"+str(i)) 26 self.tree.column(i, width=ww) 27 for i in data: 28 self.tree.insert("", "end", value=(i)) 29 30 self.button1 = tk.Button(self.win, text="▲", command=self.push_button1) 31 self.button1.grid(row=0, column=2, sticky="nsew") 32 self.button2 = tk.Button(self.win, text="▼", command=self.push_button2) 33 self.button2.grid(row=1, column=2, sticky="nsew") 34 self.button3 = tk.Button(self.win, text="◀", command=self.push_button3) 35 self.button3.grid(row=2, column=0, sticky="nsew") 36 self.button4 = tk.Button(self.win, text="▶", command=self.push_button4) 37 self.button4.grid(row=2, column=1, sticky="nsew") 38 39 def push_button1(self): 40 print("push_button1") 41 42 def push_button2(self): 43 print("push_button2") 44 45 def push_button3(self): 46 print("push_button3") 47 48 def push_button4(self): 49 print("push_button4") 50 51 52def main(): 53 win = tk.Tk() 54 App(win) 55 win.mainloop() 56 57if __name__ == "__main__": 58 main()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/06 13:30 編集
2021/04/06 17:26