Tenere qtableView Scorrimento all'ultima riga quando il modello è in crescita
-
11-12-2019 - |
Domanda
Ho un qtableView in un'applicazione PYQT.Ho continuamente aggiunto le righe al modello sottostante.E quello che voglio è la vista per scorrere continuamente fino all'ultima, la riga più recente (è quel comportamento chiamato "AutosCrolling"?).Ma invece, la vista non scorre affatto (automaticamente) e rimane alla sua posizione.
Posso abilitare questo comportamento di autoscrolling in qualche modo o devo prendere in considerazione qualcosa per raggiungerlo?
Cheers, Wolfgang
Soluzione
Non vi è alcuna funzione di autosCrolling predefinita, ma è possibile ottenere il comportamento relativamente semplice.Il modello emetterà rowsInserted
quando si inseriscono / aggiungi le righe.È possibile connettersi a quel segnale e chiamare scrollToBottom
sulla tua vista.
C'è un problema però.La vista deve adattarsi a se stessa, perché non inserisce l'oggetto in basso immediatamente quando rowsInserted
Fires.Chiamare scrollToBottom
all'interno di un QTimer.singleShot
risolve questo perché QTimer
attenderà finché non ci saranno eventi in attesa (come l'aggiornamento della vista).
Supponendo che il modello sia memorizzato come self.model
e la vista è self.view
, questo è il modo in cui cercherà:
.
self.model.rowsInserted.connect(self.autoScroll)
E il metodo autoScroll
:
.
def autoScroll(self):
QtCore.QTimer.singleShot(0, self.view.scrollToBottom)
o se preferisci non avere un metodo separato per questo:
.self.model.rowsInserted.connect(lambda: QtCore.QTimer.singleShot(0, self.view.scrollToBottom))