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

È stato utile?

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))
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top