2017-09-04 2 views
1

Je suis en train de développer un éditeur de texte avec PyQt5 et j'implémente la fonction "Find next ...". L'utilisateur entre la chaîne qu'il veut rechercher. Chaque fois qu'il clique sur le bouton "Chercher ensuite", la prochaine chaîne correspondante sera mise en surbrillance. Like thisPyQt5 - Faites défiler jusqu'au curseur de QTextEdit

Je l'ai fait en utilisant QTextEdit.textCursor() comme ceci:

... 
textarea = QTextEdit() 
cursor = textarea.textCursor() 

#This function returns an array: [start index of the matched string, end index of the matched string] 
matched_string_indexes = findText(text_to_find, text,...) 

#So now I can use setPosition to select the matched string 
cursor.setPosition(array[0], QTextEdit.MoveAnchor) 
cursor.setPosition(array[1], QTextEdit.KeepAnchor) 

#Now that the matched string is seleted I can highlight it 
highlightText(cursor) 

Le problème est de savoir si la chaîne correspondante est au bas de la page (hors du port de vue), je voulez que la zone de texte défile vers le bas (ou vers le haut) automatiquement. J'ai essayé avec la méthode ensureCursorVisible() de QTextEdit mais cela ne fonctionne pas.

Une solution de force brute consiste à calculer la coordonnée y de la ligne courante en pixels plutôt que d'utiliser la méthode scrollbar.setValue() pour faire défiler jusqu'à cette ligne.

+1

Vous devrez sûrement appeler 'textarea.setTextCursor (cursor)' pour que 'ensureCursorVisible()' fonctionne. – ekhumoro

+0

Cela a fonctionné omg ... J'étais tellement sûr que le curseur renvoyé par la méthode QTextEdit.textCursor() doit être "défini" comme le curseur du textarea. Merci beaucoup. – NewBieBR

Répondre

2

En fait, je dois juste à: méthode

textarea.ensureCursorVisible() 
#AND 
textare.setTextCursor(cursor) 

La méthode TextCursor() retourne de QTextEdit une copie de son curseur, et non pas le vrai si nous devons le mettre avec setTextCursor().