gpt4 book ai didi

python - 用 QTableWidget 显示一个巨大的表

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:30 25 4
gpt4 key购买 nike

我需要使用 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

当我使用鼠标滚动或单击滚动条按钮时,它工作得很好。但是当我捕获 slider 或使用键盘移动选定的案例时,我被挡在了显示的区域中。

此外,滚动区域的大小仅对应于显示的行。我想重新定义它以设置我自己的栏(例如,根据实际行数设置大小),以便我可以快速移动到工作表的另一部分。但是滚动条的大小总是随着显示的行数而更新。

所以,我希望你能帮助我解决这两个问题,或者给我另一个展示如此巨大的工作表的想法。也许我错过了一个模块或类,它们已经具有在移动光标时加载/显示行的功能。

谢谢

最佳答案

我编写了一个工具,可以在类似 Excel 的表格中显示 10^6+ 行,而不会出现资源问题。解决方案是使用 QTableViewQAbstractTableModel。您必须从QAbstractTableModel 派生并实现它需要您实现的必要功能(我记得headerDatadata,但我认为还有更多).然后通过执行 view.setModel(model) 将模型插入到 View 中。有关如何完成此操作的更多信息,请参见 here .

关于python - 用 QTableWidget 显示一个巨大的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com