Что эффективнее — выделять ячейки в методе данных QAbstractTableModel или в методе рисования QItemDelegate?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Что эффективнее — выделять ячейки в методе данных QAbstractTableModel или в методе рисования QItemDelegate?

Сообщение Anonymous »

Я создаю таблицу Qt на Python для отображения большого DataFrame pandas. В таблице используется пользовательская PandasTableModel (подкласс QAbstractTableModel) для подключения к DataFrame, и я хочу условно выделить ячейки — например, красным для значений False и зеленым для True.
Я нашел два способы сделать это:
  • Использование метода data в модели: возврат определенного цвета фона для определенных ячеек в зависимости от их значения.

    Код: Выделить всё

    class PandasTableModel(QtCore.QAbstractTableModel):
    ...
    @override
    def data(self, index, role):
    if not index.isValid():
    return None
    value = self._dataframe.iloc[index.row(), index.column()]
    if role == QtCore.Qt.ItemDataRole.DisplayRole:
    return str(value)
    elif role == QtCore.Qt.ItemDataRole.BackgroundRole:
    if value == "True":
    return QtGui.QColor(0, 255, 0, 100)
    elif value == "False":
    return QtGui.QColor(255, 0, 0, 100)
    return None
    
  • Использование метода рисования пользовательского делегата: установка цвета фона ячейки в отрисовке
  • Использование метода рисования пользовательского делегата: установка цвета фона ячейки в отрисовке
  • Использование метода рисования пользовательского делегата: установка цвета фона ячейки в отрисовке
  • Использование метода рисования пользовательского делегата: установка цвета фона ячейки в отрисовке
  • Использование метода рисования пользовательского делегата: установка цвета фона ячейки в отрисовке
  • Использование метода рисования пользовательского делегата code> метод делегата (подкласс QItemDelegate):

    Код: Выделить всё

    class PandasItemDelegate(QtWidgets.QItemDelegate):
    ...
    @override
    def paint(self, painter, option, index):
    super().paint(painter, option, index)
    value = index.data(QtCore.Qt.ItemDataRole.DisplayRole)
    if value in ["True", "False"]:
    color = QtGui.QColor(0, 255, 0, 100) if value == "True" else QtGui.QColor(255, 0, 0, 100)
    painter.fillRect(option.rect, color)
    
Какой подход будет более эффективным, особенно для большого DataFrame, с точки зрения памяти и скорости обработки?


Какой подход будет более эффективным, особенно для большого DataFrame, с точки зрения памяти и скорости обработки?


Какой подход будет более эффективным, особенно для большого DataFrame, с точки зрения памяти и скорости обработки?


Какой подход будет более эффективным, особенно для большого DataFrame, с точки зрения памяти и скорости обработки?


Какой подход будет более эффективным, особенно для большого DataFrame, с точки зрения памяти и скорости обработки?


Какой подход будет более эффективным, особенно для большого DataFrame, с точки зрения памяти и скорости обработки?


Какой подход будет более эффективным, особенно для большого DataFrame? п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... -method-or
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»