【问题标题】:Right approach for speeding up presentation of large amount of data?加快呈现大量数据的正确方法?
【发布时间】:2012-01-13 10:47:16
【问题描述】:

stackoverflow 上的第一个问题。已经阅读了一段时间,同时尝试学习 Python 和 wxPython。

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

所以我尝试使用 wxPython 和许多 StaticText 控件制作界面。加载耗时 5 秒,使用 timeit 模块计时。

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

我的问题很简单:您认为我选择了正确的方法吗? 或者是否有更简单的 Pythonic 方式来执行此操作,而不使用需要永远加载的 StaticText?

网格不是我的解决方案,因为我希望数据以非常具体的布局呈现。为了能够用网格做到这一点,我必须将网格设置为 2px 和高度,然后合并整个地方的单元格......

编辑:

昨天的控件图片下载链接: http://dl.dropbox.com/u/10606669/super.png

丑陋,不是我想要的样子。这是因为我试图编写自己的 sizer 例程。

【问题讨论】:

  • 如果数据不敏感,您能否发布一张图片以帮助您更好地了解您要达到的目标的规模。
  • 网络所有的东西。为浏览器做。
  • 我尝试发截图,但不被允许,因为我是新会员...
  • 您可以将截图上传到imageshack.us并发布链接。
  • 我笨....当然我可以给你一个链接而不是发布图片..

标签: python wxpython


【解决方案1】:

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

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

不过,一般来说,拥有这么多 Window 控件会影响性能,因此自定义绘图是唯一的解决方案。您可以通过为一只股票创建自己的自定义控件(使用其自己的 EVT_PAINT 处理程序等)然后创建 100 个股票来简化一些事情。它应该使您的 DC 计算更容易。请参阅Creating Custom Controls 了解更多信息。

【讨论】:

  • 冻结不会使其加载速度更快。将其全部放入不同的 StaticText 仍然慢 500 倍。
  • 所以我想我选择了自定义绘图的正确方法。感谢您的回答。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 2016-06-12
  • 2011-10-18
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多