如何在Tkinter中显示可滚动的电子表格?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Tkinter中显示可滚动的电子表格?相关的知识,希望对你有一定的参考价值。

目前我正在使用Treeview。问题是我使用了相当大的数据集。为了使GUI不大,我限制了Treeview的大小以适应窗口并添加了垂直和水平滚动条。它按照我想要的方式显示数据,但是在每个方向滚动时都存在速度问题。是否有更好/更快的方式来显示类似电子表格的数据。

答案

以下解决方案拼凑在一起但应达到预期效果:

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()
另一答案

我最终使用了pandastable(https://github.com/dmnfarrell/pandastable)。因为它提供了一种快速简便的方式,以电子表格的方式显示数据。它还提供了许多内置功能,例如:排序,过滤和将功能应用于列

以上是关于如何在Tkinter中显示可滚动的电子表格?的主要内容,如果未能解决你的问题,请参考以下文章

Python,Tkinter:如何在可滚动画布上获取坐标

网格填充可滚动区域tkinter中的空白空间

Tkinter笔记本-窗口宽度的选项卡太多

在Tkinter中调整滚动条高度?

表格 滚动条怎么调整

如何在 Tkinter 中获得带有滚动条的 Frame?