加快大量数据呈现的正确方法?

时间:2012-01-13 10:47:16

标签: python wxpython

有关stackoverflow的第一个问题。在学习Python和wxPython时,现在已经阅读了一段时间。

我正在编写一个小应用程序,用于以自定义方式在屏幕上显示大量数据。数据是存储在Python中的对象中的股票信息。它应该在屏幕上同时呈现大约100种股票。每个stockobject都有35个属性,因此它可以同时显示3 500个属性。我想要不同的字体,大小和颜色取决于属性。每个stockobject的背景都在变化,具体取决于用户(我)的输入。

所以我尝试使用wxPython和许多StaticText控件创建一个接口。加载需要5秒钟,并使用timeit模块对其进行计时。

谷歌搜索网给了我一个想法,在设备上下文中绘制数据。这只花了0.1秒。为了使应用程序可单击,我将第二张图片绘制到内存中,每个属性都有特定的颜色。当点击显示图片的面板时,我将坐标与内存中的DC进行比较,以计算点击的内容。现在我要编写一个sizer例程,以便用户可以更改fontsize。

我的问题很简单:您认为我选择了正确的方法吗? 或者是否有更简单的pythonic方法来实现这一点,而不使用永远加载的StaticText?

网格对我来说不是一个解决方案,因为我希望数据以非常具体的布局呈现。为了能够使用网格,我必须将网格设置为2px with hight,然后将整个地方的单元格合并...

编辑:

用于下载昨天看到的控制器图片的

链接: http://dl.dropbox.com/u/10606669/super.png

丑陋而不是我想要它的确切方式。这是因为我试图编写自己的sizer例程。

1 个答案:

答案 0 :(得分:1)

您可以尝试在加载过程中冻结整个框架,如下所示:

frame.Freeze()
try:
    # load all data
finally:
    frame.Thaw()

一般来说,拥有那么多Window控件会损害性能,所以自定义绘图是唯一的解决方案。您可以通过为一个库存(使用自己的EVT_PAINT处理程序等)创建自己的自定义控件然后创建其中的100个来简化一些事情。它应该使您的DC计算更容易。有关详细信息,请参阅Creating Custom Controls