2012-01-13 2 views
2

最初の質問stackoverflowで今まで。 PythonとwxPythonを学びながら、しばらく読んでいました。大量のデータを高速に表示するための正しいアプローチですか?

大量のデータをカスタムの方法で画面に表示するための小さなアプリケーションを作成しています。データは、Pythonのオブジェクトに格納されている在庫情報です。画面上に同時に表示される約100の株式。すべての在庫オブジェクトには35の属性があるので、同時に3 500の属性を表示します。そして、属性に応じて異なるフォント、サイズ、色が必要になります。ストックオブジェクトの背景は、ユーザ(私)の入力に応じて変化しています。

私はwxPythonと多くのStaticTextコントロールとのインターフェイスを作ろうとしました。ロードには5秒かかり、timeitモジュールでタイミングをとる。

ネットをグーグルで見ると、代わりにデバイスコンテキストでデータを描画するというアイデアがありました。それはわずか0.1秒しかかかりませんでした。アプリケーションをクリック可能にするために、私は、属性ごとに特定の色で2番目の画像をメモリに描画します。画像が表示されているパネルをクリックすると、その座標とメモリ内のDCとを比較して、何がクリックされたかを計算します。そして今、ユーザーがフォントサイズを変更できるように、サイザールーチンを書くつもりです。

私の質問は簡単です。私は正しいアプローチを選んだと思いますか? これを行うにはもっと簡単な方法がありますか?StaticTextを使わずにロードしてもらえますか?

グリッドは私にとっては解決策ではありません。データを非常に特定のレイアウトで表示したいからです。グリッドでそれを行うことができるようにするには、私は...とし、絶頂2PXするグリッドを設定し、あらゆる場所にセルを結合しなければならない

編集:画像をダウンロードするための

リンク昨日見たようにコントロールの: http://dl.dropbox.com/u/10606669/super.png

醜いと私はそれがlokにしたい正確な方法ではありません。これは私自身のサイザールーチンを書こうとしているからです。多くのウィンドウコントロールがパフォーマンスを傷つけることになる、しかし、一般的には

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

ので、カスタム描画は、唯一のソリューションです:

+0

データが機密でない場合は、画像を投稿して達成しようとしている規模のより良いアイデアを得ることができますか? –

+0

WEBすべての事。ブラウザのためにそれをしなさい。 –

+0

私はスクリーンショットを投稿しようとしましたが、私は新しいメンバーであるため許可されませんでした。 – Strixx

答えて

1

あなたはこのように、ロード・プロセス中にフレーム全体を凍結してみてください。 1つの在庫(独自のEVT_PAINTハンドラなど)を使用して独自のカスタムコントロールを作成し、そのうち100個を作成することで、単純化することができます。あなたのDC計算を簡単にするはずです。詳細については、Creating Custom Controlsを参照してください。

+0

フリーズしても読み込みが速くなりません。別のStaticTextにすべてを入れるのはまだ500時間遅いです。 – Strixx

+0

だから私はカスタム描画で正しいアプローチを選んだと思う。あなたの答えは高貴です。 – Strixx

関連する問題