2017-09-27 3 views
0

J'utilise mergeCharFormat sur plusieurs mots de mon QTextEdit, dans le but de les mettre en évidence. Quelque chose comme ceci:(PyQt) Comment puis-je réinitialiser le CharFormat d'un QTextEdit entier?

import sys 
from PyQt4 import QtGui, uic 
from PyQt4.QtCore import * 

def drawGUI(): 
    app = QtGui.QApplication(sys.argv) 
    w = QtGui.QWidget() 
    w.setGeometry(200, 200, 200, 50) 
    editBox = QtGui.QTextEdit(w) 
    text = 'Hello stack overflow, this is a test and tish is a misspelled word' 
    editBox.setText(text) 

    """ Now there'd be a function that finds misspelled words """ 

    # Highlight misspelled words 
    misspelledWord = 'tish' 
    cursor = editBox.textCursor() 
    format_ = QtGui.QTextCharFormat() 
    format_.setBackground(QtGui.QBrush(QtGui.QColor("pink"))) 
    pattern = "\\b" + misspelledWord + "\\b" 
    regex = QRegExp(pattern) 
    index = regex.indexIn(editBox.toPlainText(), 0) 
    cursor.setPosition(index) 
    cursor.movePosition(QtGui.QTextCursor.EndOfWord, 1) 
    cursor.mergeCharFormat(format_) 

    w.showFullScreen() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    drawGUI() 

Ainsi, cette caractéristique de mise en évidence fonctionne exactement comme prévu. Cependant, je ne peux pas trouver un bon moyen d'effacer les points saillants de la zone de texte. Qu'est-ce qu'une bonne méthode pour faire une telle chose, en définissant simplement le format char de l'ensemble de QTextEdit à ses valeurs par défaut? Ce que j'ai essayé jusqu'à présent, c'est d'obtenir le curseur à nouveau, et de définir son format à un nouveau format avec un arrière-plan clair, puis de placer le curseur sur toute la sélection et en utilisant QTextCursor.setCharFormat(), mais cela semble ne fais rien.

Répondre

1

L'application d'une nouvelle QTextCharFormat au document entier fonctionne pour moi:

def drawGUI(): 
    ... 
    cursor.mergeCharFormat(format_) 

    def clear(): 
     cursor = editBox.textCursor() 
     cursor.select(QtGui.QTextCursor.Document) 
     cursor.setCharFormat(QtGui.QTextCharFormat()) 
     cursor.clearSelection() 
     editBox.setTextCursor(cursor) 

    button = QtGui.QPushButton('Clear') 
    button.clicked.connect(clear) 

    layout = QtGui.QVBoxLayout(w) 
    layout.addWidget(editBox) 
    layout.addWidget(button) 
+0

Impressionnant! Je ne savais pas qu'il y avait juste un .select() pour le curseur, quelque part manqué dans les docs. – Ajv2324