2017-09-25 1 views
0

현재 트 리뷰를 사용 중입니다. 문제는 내가 꽤 큰 데이터 세트를 사용하고 있다는 것이다. GUI가 방대하지 않으므로 Treeview의 크기를 창에 맞게 제한하고 세로 및 가로 스크롤 막대를 추가했습니다. 그것은 원하는대로 데이터를 정확히 표시하지만 각 방향으로 스크롤 할 때 속도 문제가 있습니다. 스프레드 시트와 유사한 데이터를 표시하는 더 좋고/더 빠른 방법이 있습니까?Tkinter에서 스크롤 가능한 스프레드 시트를 어떻게 표시해야합니까?

+0

사용자가 스프레드 시트에서 셀을 업데이트 할 수 있어야합니까, 아니면 모든 데이터가 정적이며 프로그램에 의해로드되거나 계산 된 것입니까? ? –

+0

@EthanField 편집 가능한 데이터가 있으면 좋을 것입니다. 그러나 정적 데이터를 사용하는 것이 훨씬 빠르다면 정적 접근 방식을 확실히 열어 둡니다. – Roars

+1

두 가지 모두 가능하며 두 가지 모두 응답 성 측면에서 매우 잘 수행되어야하지만 편집 가능한 양식은 훨씬 더 깊이 있습니다. Excel에서 직접 입력 할 필요가있는 경우 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() 
관련 문제