PyQt クラスを使用してデータを表示する必要がありますQTableWidget
。しかし、数十万行になる可能性があります。シート全体を表示すると、アプリがハングアップします...
そこで、データをロードする (つまり、シートが作成される) がほとんどの行を非表示にし、スクロール バーを移動するときに新しい行を表示し、前の行を非表示にするソリューションを見つけました。
次のコードではself.rowsShown = 50
、設定し、初期化で 1 から 50 までの行を表示します。そして、私は以前にやったself.verticalScrollBar().actionTriggered.connect(self.refreshDisplay)
.
したがって、コードは次のとおりです。
def refreshDisplay(self):
"""
This is to refresh the display when the scrollbar is moved
"""
# Minimum is reached and a previous row exists
if self.verticalScrollBar().value() <= self.verticalScrollBar().minimum() and self.isRowHidden(self.firstRowShown-1):# Minimum is reached and a previous row exists
for row in xrange(self.lastRowShown-1, self.lastRowShown):
self.hideRow(row)
self.lastRowShown -= 1
for row in xrange(self.firstRowShown-1, self.firstRowShown):
self.showRow(row)
self.firstRowShown -= 1
# Maximum is reached and a next row exists
if self.verticalScrollBar().value() >= self.verticalScrollBar().maximum() and self.isRowHidden(self.lastRowShown+1):
for row in xrange(self.firstRowShown, self.firstRowShown+1):
self.hideRow(row)
self.firstRowShown += 1
for row in xrange(self.lastRowShown, self.lastRowShown+1):
self.showRow(row)
self.lastRowShown += 1
マウスのロールを使用したり、スクロールバーのボタンをクリックしたりすると、これは非常にうまく機能します。しかし、スライダーをつかむか、キーパッドを使用して選択したケースを移動すると、表示されている領域でブロックされます。
さらに、スクロール領域のサイズは、表示されている行のみに対応します。シートの別の部分にすばやく移動できるように、独自のバー (たとえば、実際の行数に基づくサイズ) を設定するように再定義したいと考えています。ただし、スクロール バーのサイズは、表示される行数で常に更新されます。
ですから、私があなたに期待しているのは、この 2 つの問題を解決するのを手伝ってくれること、またはそのような巨大なシートを表示するための別のアイデアを教えてくれることです。カーソルの移動中に行をロード/表示するというこの機能をすでに備えているモジュールまたはクラスを見逃したのかもしれません。
ありがとう