QTableView Horizo​​ntalHeader 让它非常滞后?

Posted

技术标签:

【中文标题】QTableView Horizo​​ntalHeader 让它非常滞后?【英文标题】:QTableView horizontalHeader makes it very laggy? 【发布时间】:2019-05-08 08:02:40 【问题描述】:

我有下面的代码,我注意到当我按 ctrl+A 选择所有行时感觉很迟钝,大约需要 1 秒才能完成选择。但是,我也注意到,如果我用self.horizontalHeader().hide() 隐藏水平标题,则滞后完全消失!为什么会这样?我怎样才能摆脱滞后但保留我的标题?

from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtCore import Qt
import pandas as pd
import numpy as np
import sys

class SeriesModel(QtCore.QAbstractTableModel):
    def __init__(self, series):
        super().__init__()
        self.series = series

    def columnCount(self, parent=None):
        return 1

    def rowCount(self, parent=None):
        return len(self.series)

    def data(self, index, role=None):
        row = index.row()
        col = index.column()
        if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.ToolTipRole:
            return str(self.series[row])

    # The headers of this table will show the level names of the MultiIndex
    def headerData(self, section, orientation, role=None):
        if role in [QtCore.Qt.DisplayRole, QtCore.Qt.ToolTipRole]:
            if orientation == Qt.Horizontal:
                return str(self.series.name)

class SeriesView(QtWidgets.QTableView):
    def __init__(self, series):
        super().__init__()

        self.setModel(SeriesModel(series))

        # self.horizontalHeader().hide()

# Examples
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    series = pd.Series(np.random.randn(1000000)).rename('MyData')

    view = SeriesView(series)
    view.show()

    sys.exit(app.exec_())

【问题讨论】:

【参考方案1】:

问题在于,highlightSections 属性在 QTableView 标头中默认启用。此属性意味着,如果选择了一个项目,则标题中暗示重绘的项目也被选中,在您的情况下,您有 1000000,因此它将被重绘类似的次数。所以一个可能的解决方案是禁用该属性:

class SeriesView(QtWidgets.QTableView):
    def __init__(self, series):
        super().__init__()
        self.setModel(SeriesModel(series))
        self.horizontalHeader().setHighlightSections(False)

【讨论】:

以上是关于QTableView Horizo​​ntalHeader 让它非常滞后?的主要内容,如果未能解决你的问题,请参考以下文章

MPAndroidchart 圆形边缘用于彩色 Horizo​​ntalBarChart

Laravel Horizo​​n 抛出错误:调用未定义的函数 Laravel\Horizo​​n\Console\pcntl_async_signals()

css Horizo​​ntal-Center / Centra horizo​​ntalmente cualquier elemento(el padre debe tenerunaposici&#

Horizo​​ntalScrollView 以编程方式滚动而没有焦点

如何在Blackberry中动态增加horizo ntalfieldmanager高度?

Horizo​​ntalScrollView 隐藏其子视图