如何设置 QTableWidget 在实时数据输入期间始终滚动到底部

问题描述 投票:0回答:4

我目前有一个实现 QTableWidget 的工作 GUI(不要与 QTableView 混淆)。这个 QTableWidget 接收实时数据流,我想拥有它,所以出现的垂直滚动条默认位于底部。我尝试了几种方法,包括 setToBottom() 但没有成功。我知道有很多方法可以通过使用 QTableView 来做到这一点,但是我正在寻找一种通过 QTableWidget 来做到这一点的方法。

python qt pyqt pyqt4 qt-designer
4个回答
5
投票

您可以在插入新项目后立即使用

self.ui.tableWidget.scrollToBottom
。但它并不总是按预期工作。它仅将滚动条移动到插入的最后一行的开头,这不一定总是表格的底部,因为有时插入的最后一行的高度确实很大。

所以我认为这是始终滚动到 tablewidget 底部的好方法:

item = self.ui.tableWidget.item(lastIndex, 0)
self.ui.tableWidget.scrollToItem(item, QtGui.QAbstractItemView.PositionAtTop)
self.ui.tableWidget.selectRow(lastIndex)

scrollToItem
滚动视图以确保项目可见。 hint 参数更精确地指定操作后项目应位于的位置。这里
PositionAtTop
滚动以将项目定位在视口的顶部,
lastIndex
是插入到表中的最后一个项目的索引。


0
投票

据我所知,布局失效在 Qt 视图中被延迟。因此,您不能在添加数据后立即滚动到某个元素或底部。您应该使用计时器延迟滚动。这有点脏,但我想出的唯一工作方式

像这样(C++代码)

void getData() { addDataToWidget(); QTimer::singleshort(10, widget, SLOT(scrollToBottom()); }
    

0
投票
如果您正在使用

PyQt6,您可以使用:

self.tableWidget.setItem(row, column, itemMeasVal) self.tableWidget.scrollToItem(itemMeasVal,QtWidgets.QAbstractItemView.ScrollHint.EnsureVisible) # This is for the bar to scroll automatically and then the current item added is always visible
必要时滚动视图以确保项目可见。

hint 参数 更精确地指定操作后项目应位于的位置。 您可以在这里查看更多信息:https://doc.qt.io/qtforpython/PySide6/QtWidgets/QTableWidget.html https://doc.qt.io/qtforpython/PySide6/QtWidgets/QAbstractItemView.html#PySide6.QtWidgets.PySide6.QtWidgets.QAbstractItemView.scrollTo


0
投票
嗨,我用这个简单的代码在 pyQt6 中处理了它:

self.table.verticalScrollBar().setSliderPosition(self.table.verticalScrollBar().maximum())
好运

© www.soinside.com 2019 - 2024. All rights reserved.