Tkinter网格管理器的大小限制

时间:2011-06-21 20:20:42

标签: python performance grid tkinter

我正在编写一个Python应用程序来解析二进制文件列表,汇总其中数据的统计信息以及输出结果。我可以轻松地将这些结果输出为.tsv文件,但是这个程序是为了方便我的同事而编写的,所以我试图让它在新窗口中显示结果,以防止在Excel中打开文件。现在我基本上是在一个滚动的画布中嵌入一个Tkinter框架,并将包含数据标签的较小框架网格化到框架中。 (较小的框架似乎是必要的,以使所有边框与网格线对齐;否则它们将被收缩包装以适合标签)

这种方法适用于超过一百列甚至十行。但是当我开始将行数增加到数百行时,我开始遇到奇怪的问题。程序可能无响应,新窗口可能无法显示,并且所有标签(而不是在网格中绘制)都放在屏幕的左上角。由于这似乎是与比例相关的问题,我想知道我是否只是用数以万计的元素压倒网格管理器。所以我有两个问题:1)我是否可能遇到这样的限制,或者是其他地方的问题; 2)是否有更好的方法在Tkinter中实现类似Excel的表格显示,避免出现这些问题?

2 个答案:

答案 0 :(得分:2)

我编写了一个测试程序,以两种方式显示数据,一次使用框架和网格,一次直接在画布上绘制文本。

使用frame + grid技术,100行乘以10列的性能是完全可以接受的。当我碰到多达200行时,性能下降了2倍以上,当我达到300行时,性能无法使用。我的意思是,初始显示需要几十秒钟。然而,一旦窗口出现,表现就可以接受了。

直接在画布上绘制文本项目,性能相当更好。我可以显示300行乘10列,初始显示几乎是瞬时的。当我有1000行100列时,性能仍然可以接受,启动时间可能需要2-3秒。

因此,对于大量单元格,最好直接在画布上绘制它们。这意味着您需要自己计算行的高度,并对列进行一些数学计算 - 使用固定宽度列或跟踪最宽,然后相应地调整坐标。

答案 1 :(得分:1)

随着事物变大,网格几何管理器遇到问题;它不是为处理大量的子窗口而设计的(也就是说,任何你想要扩展的东西,超出你可以轻松拥有而不滚动的东西)。相反,你正在寻找TkTable。这可以扩展到处理非常大的表格数据。