2017-09-25 6 views
0

Derzeit verwende ich eine Treeview. Das Problem ist, dass ich einen ziemlich großen Datensatz verwende. So, dass die GUI nicht massiv ist, habe ich die Größe des Treeview begrenzt das Fenster und hinzugefügt vertikale und horizontale Bildlaufleisten passen. Es zeigt die Daten genau an, wie ich es möchte, allerdings gibt es Geschwindigkeitsprobleme beim Scrollen in jede Richtung. Gibt es eine bessere/schnellere Möglichkeit, um tabellenblattähnliche Daten anzuzeigen?Wie sollte eine scrollbare Tabelle in Tkinter angezeigt werden?

+0

Haben Sie Benutzer benötigen Zellen in der Tabelle in der Lage sein zu aktualisieren oder alle Daten statisch und geladen/vom Programm berechnet ? –

+0

@EthanField Editierbare Daten wären schön. Wenn statische Daten jedoch viel schneller wären, würde ich mich definitiv für einen statischen Ansatz öffnen. – Roars

+1

Beide sind möglich und beide sollten sehr gut in Bezug auf die Reaktionsfähigkeit, aber editierbare Formen sind viel ausführlicher. Gibt es einen Grund, warum Excel für diesen Zweck nicht ausreicht, wenn Sie eine direkte Eingabe benötigen? –

Antwort

1

ich landete mit pandastable (https://github.com/dmnfarrell/pandastable). Da es eine schnelle und einfache Möglichkeit bietet, Daten in Tabellenform anzuzeigen. Es bietet auch eine Menge an Funktionalität gebaut, wie zum Beispiel: Sortieren, Filtern und Anwenden von Funktionen auf Spalten

+1

erstaunlich, dass es im Grunde ein tkinter Leinwand mit geraden Linien und Text gezeichnet, wirklich schade, dass jemand tcl Entwicklung hat für tkinter eine richtige Tabelle Widget in C geschrieben – citizen2077

1

Die folgende Lösung wird zusammengeschustert, sollte aber das gewünschte Ergebnis erzielen. Ich werde eine Erklärung für sie schreiben, wenn ich die Chance bekommen:

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() 
Verwandte Themen