1

SQLite3 データベースに格納されている大きなデータ セット (ログ データ) があります。クエリからのデータを表示する Wx.listctrl を使用して Python GUI を作成しました。少量のデータでは問題なく機能しますが、明らかに大きなセットではハングします..したがって、次の2つのうちの1つを実装したいと思います。

-ページングは​​、最初の 5000 レコードが listctrl に表示され、ユーザーがボタンをクリックすると、次の 5000 レコードが表示されます.. などなど.. または -ユーザーが listctrl を下にスクロールすると、常に新しいデータが入力されます。 .

これらの概念の 1 つをどのように実装しますか? 助けてくれてありがとう!

4

2 に答える 2

2

ドキュメントで説明されているように、仮想コントロールにします。リストビューは、表示されている特定の行を要求するために、必要に応じてコールバックを呼び出します。

于 2012-04-04T23:17:25.653 に答える
0

シナリオが異なれば、戦略も異なります。wxPython をプレゼンテーションの目的で使用し、データを処理する別のモジュール/パッケージがあることを前提としています。wxPython コントロールは、データ抽象化レイヤーからのみデータを取得します。

シナリオ I: すべてのログ データをメモリにロードし、wx.listctrl または wx.listview を使用して行を表示します。

シナリオ II: wx ビューが更新されたときにデータベースからデータを取得します。

シナリオ I では、UI が読み取った位置を記憶する変数をセットアップするだけで済みます。または、ログをリストとしてロードする場合は、リスト スライドを使用することもできます。すべてのデータがロードされ、それ以上 sqlite db 接続が確立されないため、下/上にスクロールしてビューを自動的に更新することは、シナリオ I で実装できます。データベース操作が多すぎるため、シナリオ II で上下にスクロールして自動更新を実装するのは適切ではありません。

シナリオ II では、ページ サイズを設定し、LIMIT/OFFSET を使用して必要なデータ セットを取得できます。オフセット番号用に別の変数を保持します。変数 page_size と offset を使用すると、データを取得して wx ビューを更新するだけです。このシナリオは、メモリの使用を制限する場合に特に適しています。ログの大きさはわかりませんが、ログが大きくなり続け、他の比較的大きなデータセットを同時にロードする必要がある場合があるため、すべてをメモリにロードすることはお勧めできません。

于 2012-04-05T02:33:07.800 に答える