2017-09-25 72 views
0

現在、私はツリービューを使用しています。問題は、かなり大きなデータセットを使用していることです。 GUIが大規模ではないように、ウィンドウに合わせてツリービューのサイズを制限し、垂直と水平のスクロールバーを追加しました。それは私が望むようにデータを正確に表示しますが、各方向にスクロールする際にはスピードの問題があります。スプレッドシートのようなデータを表示するためのより良い/より速い方法がありますか?スクロール可能なスプレッドシートをTkinter内でどのように表示する必要がありますか?

+0

ユーザーがスプレッドシート内のセルを更新できるようにするか、すべてのデータが静的であり、プログラムによってロード/計算されているか? –

+0

@EthanField編集可能なデータがあればいいですね。しかし、静的なデータを持っているとかなり速くなりますが、私は静的なアプローチには間違いありません。 – Roars

+1

どちらも可能ですが、どちらも応答性の点では非常に優れていますが、編集可能なフォームはもっと深いところです。直接入力できるようにする必要がある場合、Excelがその目的には十分ではない理由はありますか? –

答えて

1

私はpandastable(https://github.com/dmnfarrell/pandastable)を使用して終了:私はチャンスを得るとき、私はそれについての説明を記述します。スプレッドシートにデータを簡単に表示する方法を提供しました。列にソート、フィルタリング、関数を適用する

+1

これは基本的には直線とテキストが描かれたtkinterのキャンバスで、tclを開発している誰かがtkinterのためにCで適切なテーブルウィジェットを書いていないというのは本当に残念です – citizen2077

1

下記の溶液は一緒に石畳されていますが、望ましい結果が得られるはずです。

from tkinter import * 

class App: 
    def __init__(self, root): 
     self.entry = [] 
     self.sv = [] 
     self.root = root 
     self.canvas = Canvas(self.root, background="#ffffff", borderwidth=0) 
     self.frame = Frame(self.canvas, background="#ffffff") 
     self.scrolly = Scrollbar(self.root, orient="vertical", command=self.canvas.yview) 
     self.scrollx = Scrollbar(self.root, orient="horizontal", command=self.canvas.xview) 
     self.canvas.configure(yscrollcommand=self.scrolly.set)#, xscrollcommand=self.scrollx.set) 
     self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame") 
     self.scrolly.pack(side="left", fill="y") 
     self.canvas.pack(side="top", fill="both", expand=True) 
     self.scrollx.pack(side="bottom", fill="x") 
     self.frame.bind("<Configure>", self.onFrameConfigure) 
     for i in range(15): 
      self.entry.append([]) 
      self.sv.append([]) 
      for c in range(30): 
       self.sv[i].append(StringVar()) 
       self.sv[i][c].trace("w", lambda name, index, mode, sv=self.sv[i][c], i=i, c=c: self.callback(sv, i, c)) 
       self.entry[i].append(Entry(self.frame, textvariable=self.sv[i][c]).grid(row=c, column=i)) 
    def onFrameConfigure(self, event): 
     self.canvas.configure(scrollregion=self.canvas.bbox("all")) 
    def callback(self, sv, column, row): 
     print("Column: "+str(column)+", Row: "+str(row)+" = "+sv.get()) 

root = Tk() 
App(root) 
root.mainloop() 
関連する問題