我在 pyqt 应用程序中有一个 QTableView。我不断地将行附加到底层模型。而我想要的是不断滚动到最后一行的视图(这种行为称为“自动滚动”吗?)。但取而代之的是,视图根本不滚动(自动)并停留在其位置。
我可以以某种方式启用这种自动滚动行为,还是需要编写一些代码来实现它?
干杯,沃尔夫冈
我在 pyqt 应用程序中有一个 QTableView。我不断地将行附加到底层模型。而我想要的是不断滚动到最后一行的视图(这种行为称为“自动滚动”吗?)。但取而代之的是,视图根本不滚动(自动)并停留在其位置。
我可以以某种方式启用这种自动滚动行为,还是需要编写一些代码来实现它?
干杯,沃尔夫冈
没有默认的自动滚动功能,但您可以获得相对简单的行为。rowsInserted
当您插入/追加行时,您的模型将发出。您可以连接到该信号并调用scrollToBottom
您的视图。
不过有一个问题。View 需要自行调整,因为它不会在触发时立即将项目置于底部。在 a 中rowsInserted
调用解决了这个问题,因为会等到没有待处理的事件(比如更新视图)。scrollToBottom
QTimer.singleShot
QTimer
假设模型存储为self.model
并且视图为self.view
,这就是它的外观:
self.model.rowsInserted.connect(self.autoScroll)
和autoScroll
方法:
def autoScroll(self):
QtCore.QTimer.singleShot(0, self.view.scrollToBottom)
或者,如果您不希望为此使用单独的方法:
self.model.rowsInserted.connect(lambda: QtCore.QTimer.singleShot(0, self.view.scrollToBottom))