Мне нужно отображать данные, используя класс PyQt QTableWidget
. Но могут быть десятки тысяч строк. Отображение всего листа заставляет апплет зависать ...Показать огромный лист с 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
Это работает очень хорошо, когда я использую рулон мыши или нажмите на кнопках прокрутки. Но когда я хватаю ползунок или использую клавиатуру, чтобы переместить выбранный случай, я заблокирован в показанном районе.
Кроме того, размер области прокрутки соответствует только строкам. Я хотел бы переделать его, чтобы установить собственный бар (например, с размером, основанным на действительном числе строк), чтобы я мог быстро перемещаться в другую часть листа. Но размер полосы прокрутки всегда обновляется с количеством отображаемых строк.
Итак, что я ожидаю от вас, это помочь мне решить эти две проблемы, или дать мне еще одну идею для отображения такого огромного листа. Возможно, я пропустил модуль или класс, которые уже имеют эту функциональную возможность загрузки/отображения строк при перемещении курсора.
Благодаря
Вы пробовали [QTableView] (http://qt-project.org/doc/qt-4.8/qtableview.html)? –
'QTableWidget' наследуется от' QTableView'. Итак, функции 'hideRow()' и 'showRow()', которые я использовал здесь, относятся к 'QTableView'. – VGO