我在pyqt应用程序中有一个QTableView。我不断地将行附加到底层模型。我想要的是连续滚动到最后一行,最近一行的行为(这种行为称为“自动滚动”?)。但相反,视图根本不会滚动(自动)并保持其位置。
我可以以某种方式启用此自动滚动行为,还是需要编写代码来实现它?
干杯, 沃尔夫冈
答案 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))