QTableView HorizontalHeader 让它非常滞后?
Posted
技术标签:
【中文标题】QTableView HorizontalHeader 让它非常滞后?【英文标题】: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 HorizontalHeader 让它非常滞后?的主要内容,如果未能解决你的问题,请参考以下文章
MPAndroidchart 圆形边缘用于彩色 HorizontalBarChart
Laravel Horizon 抛出错误:调用未定义的函数 Laravel\Horizon\Console\pcntl_async_signals()
css Horizontal-Center / Centra horizontalmente cualquier elemento(el padre debe tenerunaposici
HorizontalScrollView 以编程方式滚动而没有焦点