当模型增长时,将QTableView滚动到最后一行

时间:2012-09-29 23:07:26

标签: python qt pyqt qtableview autoscroll

我在pyqt应用程序中有一个QTableView。我不断地将行附加到底层模型。我想要的是连续滚动到最后一行,最近一行的行为(这种行为称为“自动滚动”?)。但相反,视图根本不会滚动(自动)并保持其位置。

我可以以某种方式启用此自动滚动行为,还是需要编写代码来实现它?

干杯, 沃尔夫冈

1 个答案:

答案 0 :(得分:3)

没有默认的自动滚动功能,但您可以使行为相对简单。插入/追加行时,模型将发出rowsInserted。您可以连接到该信号并在视图上拨打scrollToBottom

但是有一个问题。视图需要自行调整,因为当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))