IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

changer la couleur de texte dans textedit


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut changer la couleur de texte dans textedit
    avec clic bouton (PYQT5) :
    comment changer la couleur d'un mot spécifique dans un textedit
    Nom : Capture.PNG
Affichages : 1274
Taille : 18,6 Ko

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Avec du html
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    zoneEdit=QTextEdit(parent=self)
    zoneEdit.acceptRichText(True)
    zoneEdit.setText("Un texte est une série orale ou écrite <font color=red>de</font> mots perçus comme constituant un ensemble cohérent, porteur <font color=red>de</font> sens ...")

    Et je t'ai déjà dit qu'il existe une section dédiée PyQt sur ce forum!!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour à toi aussi

    Citation Envoyé par rabeh.ram Voir le message
    avec clic bouton (PYQT5) :
    comment changer la couleur d'un mot spécifique dans un textedit
    S'il s'agit de mettre en couleur certains mots dans tout le texte, on peut s'inspirer des méthodes utilisées pour coloriser la syntaxe d'un code écrit dans un langage quelconque. Il existe pour ça "QSyntaxHighlighter".

    => chercher avec google avec les mots: "pyqt5 qtextedit syntax highlighter example"

    Voir par exemple: https://4uwingnet.tistory.com/5

    Il faudra, bien sûr, définir dans la bonne forme les mots concernés avec leur couleur.

    Mais dans tous les cas, on peut écrire dans un QTextEdit avec du html (en fait du "richtext" qui en est un sous-ensemble).

  4. #4
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut
    Merci pour votre soutien,
    J'ai compris que la solution le plus simple est de changer le mot de -----> le code html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <font color=red>de</font>
    Nom : replace22.PNG
Affichages : 1473
Taille : 13,8 Ko

    mais le problème est que la fonction REPLACE inefficace dans ce cas
    Remarque :
    le changement de colour ce fait une fois que le processus de écriteur est terminé et de façon plus précise : l'utilisateur de programme saisie que son texte et en suite le changement de color ce fait par clic bouton

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    S'il s'agit de mettre en couleur certains mots dans tout le texte, on peut s'inspirer des méthodes utilisées pour coloriser la syntaxe d'un code écrit dans un langage quelconque. Il existe pour ça "QSyntaxHighlighter".

    => chercher avec google avec les mots: "pyqt5 qtextedit syntax highlighter example"

    Voir par exemple: https://4uwingnet.tistory.com/5
    Pas mal !!!

    Citation Envoyé par rabeh.ram Voir le message
    Nom : replace22.PNG
Affichages : 1473
Taille : 13,8 Ko
    Merci de copier ton code dans le forum. Ca permet ainsi de notre côté de le reprendre pour tester.

    Citation Envoyé par rabeh.ram Voir le message
    mais le problème est que la fonction REPLACE inefficace dans ce cas
    Absolument pas, la méthode replace() fonctionne pafaitement. Faut juste que tu remettes le texte modifié dans le QTextEdit. Ce n'est pas pour rien que moi j'ai utilisé setText()...

    Citation Envoyé par rabeh.ram Voir le message
    le changement de colour ce fait une fois que le processus de écriteur est terminé et de façon plus précise : l'utilisateur de programme saisie que son texte et en suite le changement de color ce fait par clic bouton
    Oui, on avait bien compris.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut
    Bonsoir ,
    La solution a été trouvée grâce au soutien de Sve@r et tyrtamos merci beaucoup j'apprécie vraiment votre soutien.
    la solution est dans ce code :

    Nom : replace22.PNG
Affichages : 1019
Taille : 12,0 Ko

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Au delà de la question du PO, pour la colorisation de la syntaxe dans un QTextEdit (PyQt5) pour un code Python ou d'autres langages (y compris les scripts shell), il y a une solution pas trop compliquée avec le module externe Python "pygments".

    Si quelqu'un est intéressé je peux donner un exemple.

  8. #8
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,
    Si quelqu'un est intéressé je peux donner un exemple.
    merci en attente l'exemple

  9. #9
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Citation Envoyé par rabeh.ram Voir le message
    merci en attente l'exemple
    On peut coloriser la syntaxe d'un code avec le module externe pygments (=> https://pypi.org/project/Pygments/). Les type de langages pris en compte sont très importants! Voir la doc: https://pygments.org/docs/

    Voilà un petit code de principe pour utiliser pygments dans un QTextEdit sous PyQt5:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    """
    Classe Editscripts héritant de QTextEdit
     
    Colorisation de syntaxe de codes de langages informatiques
     
    Pour Python 3:
    pygments.lexers.python.PythonLexer
     
    Pour Python 3 console interactive:
    pygments.lexers.python.PythonConsoleLexer
     
    Pour Cython:
    pygments.lexers.python.CythonLexer
     
    Pour batch Windows (fichiers .bat):
    pygments.lexers.shell.BatchLexer
     
    Pour shell:
    pygments.lexers.shell.BashSessionLexer
    """
     
    import sys
    import os
     
    try:
        from pygments import highlight
        from pygments.lexers import get_lexer_for_filename
        from pygments.formatters import HtmlFormatter
        pygments_present = True
    except Exception:
        pygments_present = False
        print("Manque le module 'pygments' (colorisation syntaxe)")
     
    from PyQt5 import (QtWidgets, QtGui, QtCore)
     
    #############################################################################
    class EditScripts(QtWidgets.QTextEdit):
     
        #========================================================================
        def __init__(self, parent=None):
            super().__init__(parent)
     
            self.configuration()
     
        #========================================================================
        def configuration(self, script="", ext=""):
     
            # activer les modifications du texte
            self.setReadOnly(False)
     
            # les longues lignes pourront dépasser la fenêtre
            self.setLineWrapMode(QtWidgets.QTextEdit.NoWrap)
     
            # Change la police de caractères
            font = QtGui.QFont()
            font.setStyleHint(QtGui.QFont.Monospace)
            font.setFamily("DejaVu Sans Mono")
            font.setPointSize(10)
            self.setFont(font)
     
            # Initialise les variables utilisées après
            self.lexer = None
            self.formatter = None
     
            # initialise la colorisation de la syntaxe
            script = self.initcolorize(script, ext)
     
            # charge le script la première fois
            self.setText(script)
     
            # chaque modif de texte lancera la colorisation 
            #self.textChanged.connect(self.highlighter)
     
        #=========================================================================
        def initcolorize(self, script, ext=""):
            """Initialise le lexer en fonction de l'extension du fichier chargé
               Convertit et retourne le code en html colorisé
               - script: le code du script
               - ext: l'extension du fichier chargé, avec un point devant (ex: ".py")
            """
            if pygments_present:
                # Prend le bon lexer en fonction de l'extension du fichier chargé
                try:
                    self.lexer = get_lexer_for_filename(ext, stripall=False)
                except Exception:
                    return script # aucun lexer n'a été trouvé pour l'extension donnée
                # définit le formatter html
                self.formatter = HtmlFormatter(linenos=False, style="default")
                # le fichier 'html' ne doit pas avoir de fichier 'css' séparé
                self.formatter.noclasses = True
     
                # Retourne le code colorisé et formaté selon html 
                return highlight(script, self.lexer, self.formatter)
            else:
                return script # pygments absent
     
        #=========================================================================
        def highlighter(self):
            """Met à jour le code colorisé à chaque caractère modifié
            """
            if pygments_present and self.lexer is not None:
                # bloque les signaux du QTextEdit
                self.blockSignals(True)
     
                # enregistre la position verticale du texte dans la fenêtre
                posvert = self.verticalScrollBar().value()
                # enregistre la position du curseur
                poscur = self.textCursor().position()
     
                # prend le texte en cours d'édition
                script = self.toPlainText()
                # évite un warnong du curseur pour un ajout en fin de texte
                if poscur==len(script):
                    text += " " # ajoute un espace en fin de texte
     
                # colorise le texte en cours d'édition
                result = highlight(script, self.lexer, self.formatter) 
     
                #charge le html result dans le QTextEdit
                #self.setHtml(result)
                self.setText(result)
     
                # prend le curseur du QTextEdit
                cursor = self.textCursor()
                # Lui affecte la position précédente
                cursor.setPosition(poscur, QtGui.QTextCursor.MoveAnchor)
                # affecte le curseur au QTextEdit de nouveau
                self.setTextCursor(cursor)
                # remet le texte à la même position verticale
                self.verticalScrollBar().setValue(posvert)
                # dit que le texte a été modifié
                self.document().setModified(True)
     
                # débloque les signaux du QTextEdit
                self.blockSignals(False)
     
        # =======================================================================
        def keyPressEvent(self, event):
            """raccourcis clavier
            """
            #--------------------------------------------------------------------
            # Alt-C => déclenche l'affichage du script colorisé
            if event.key() == QtCore.Qt.Key_C and (event.modifiers() & QtCore.Qt.AltModifier):
                self.highlighter()
     
            #--------------------------------------------------------------------
            # autres touches: renvoi au QTextEdit pour traitement normal
            else:
                super().keyPressEvent(event)
     
    ##############################################################################
    if __name__ == '__main__':
     
        app = QtWidgets.QApplication(sys.argv)
     
        # charge le script à afficher et l'extension du fichier
        fichier = "datetime.py"
        ext = os.path.splitext(fichier)[1]
        with open(fichier, "r", encoding="utf-8") as fs:
            #lscript = [ligne.rstrip() for ligne in fs.readlines()]
            script = fs.read()
     
        # lance la fenêtre
        fen = EditScripts()
        fen.configuration(script, ext)
        fen.resize(800, 800)
        fen.show()
     
        sys.exit(app.exec_())
    Comme le travail demandé de colorisation est assez gros, il y a 2 manières de le déclencher:

    - pour les petits codes (quelques dizaines de lignes), on peut lancer la colorisation à chaque caractère tapé. Pour ça, on termine la méthode de configuration par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.textChanged.connect(self.highlighter)
    - Pour les codes plus gros, le temps d'attente après chaque caractère serait trop important (plusieurs secondes), et il vaut mieux déclencher la colorisation sur demande, par exemple avec un Alt-C comme mis dans le code ci-dessus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Couleur du texte dans un TextBox désactivé
    Par Cricket dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/10/2013, 23h16
  2. Réponses: 4
    Dernier message: 22/01/2007, 22h14
  3. Changer la couleur du texte dans un Jbutton
    Par jojo57 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 13/12/2006, 22h15
  4. Couleur de Texte dans Input Texte
    Par Niouts dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/10/2006, 11h29
  5. [VB6] - Couleur du texte dans un texte box
    Par EricStrasbourg dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 17/05/2006, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo