2012-08-23 1 views
4

Мне нужно отображать данные, используя класс 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 

Это работает очень хорошо, когда я использую рулон мыши или нажмите на кнопках прокрутки. Но когда я хватаю ползунок или использую клавиатуру, чтобы переместить выбранный случай, я заблокирован в показанном районе.

Кроме того, размер области прокрутки соответствует только строкам. Я хотел бы переделать его, чтобы установить собственный бар (например, с размером, основанным на действительном числе строк), чтобы я мог быстро перемещаться в другую часть листа. Но размер полосы прокрутки всегда обновляется с количеством отображаемых строк.

Итак, что я ожидаю от вас, это помочь мне решить эти две проблемы, или дать мне еще одну идею для отображения такого огромного листа. Возможно, я пропустил модуль или класс, которые уже имеют эту функциональную возможность загрузки/отображения строк при перемещении курсора.

Благодаря

+1

Вы пробовали [QTableView] (http://qt-project.org/doc/qt-4.8/qtableview.html)? –

+0

'QTableWidget' наследуется от' QTableView'. Итак, функции 'hideRow()' и 'showRow()', которые я использовал здесь, относятся к 'QTableView'. – VGO

ответ

2

Я написал инструмент, который отображает 10^6 + линий в Excel-таблицы, как без проблем с ресурсами. Решение состоит в использовании QTableView и QAbstractTableModel. Вы должны получить от QAbstractTableModel и реализовать необходимые ему функции, которые вам нужно реализовать (я помню headerData и data, но я думаю, что их больше). Затем вы подключите модель к своему виду, выполнив view.setModel(model). Более подробную информацию о том, как это сделать, можно найти here.

 Смежные вопросы

  • Нет связанных вопросов^_^