Мне нужно отобразить данные, используя класс 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
Это работает очень хорошо, когда я использую поворот мыши или нажимаю кнопки полосы прокрутки. Но когда я хватаю ползунок или использую клавиатуру для перемещения выбранного регистра, я заблокирован в показанной области.
При этом размер области прокрутки соответствует только отображаемым строкам. Я хотел бы переопределить его, чтобы установить свою собственную полосу (например, с размером, основанным на реальном количестве строк), чтобы я мог быстро перемещаться в другую часть листа. Но размер полосы прокрутки всегда обновляется с количеством отображаемых строк.
Итак, я ожидаю от вас помочь мне решить эти две проблемы ИЛИ дать мне другую идею для отображения такого огромного листа. Возможно, я пропустил модуль или класс, которые уже имеют эту функциональность загрузки/отображения строк при перемещении курсора.
Спасибо
QTableWidget
наследуется отQTableView
. Итак, функцииhideRow()
иshowRow()
, которые я здесь использовал, взяты изQTableView
. - person VGO   schedule 23.08.2012