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

PyQt Python Discussion :

QScintilla et autocomplétion


Sujet :

PyQt Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut QScintilla et autocomplétion
    Bonjour à tous,
    J'essaye de créer un lexer pour lilypond (un créateur de partition) avec QScintilla. J'ai un soucis avec l'autocompletion car la majorité des fonctions commence par un backslash (genre \clef ou \harmonicsOn) et QScintilla ne semble pas prendre en compte les mots commençant par des caractères spéciaux. Après quelques tests cela semble fonctionner uniquement avec des caractères alphanumériques et "_".
    Voici un petit code que j'ai trouvé sur le net:

    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
     
    import sys
    from PyQt4.QtGui import QApplication
    from PyQt4 import QtCore, QtGui, Qsci
    from PyQt4.Qsci import QsciScintilla, QsciScintillaBase, QsciLexerPython
     
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        editor = QsciScintilla()
     
        ## Choose a lexer
        ## This can be any Scintilla lexer, but the original example used Python
        lexer = QsciLexerPython()
     
        ## Create an API for us to populate with our autocomplete terms
        api = Qsci.QsciAPIs(lexer)
        editor.setBraceMatching(QsciScintilla.StrictBraceMatch)
        ## Add autocompletion strings
        api.add("aLongString")
        api.add("aLongerString")
        api.add("aDifferentString")
        api.add("sOmethingElse")
        api.add("\\clef")
        api.add("\\harmonicsOn")
        api.add("<test>")
        api.add("sOmethingElse")
        ## Compile the api for use in the lexer
        api.prepare()
     
        editor.setLexer(lexer)
     
        ## Set the length of the string before the editor tries to autocomplete
        ## In practise this would be higher than 1
        ## But its set lower here to make the autocompletion more obvious
        editor.setAutoCompletionThreshold(1)
        ## Tell the editor we are using a QsciAPI for the autocompletion
        editor.setAutoCompletionSource(QsciScintilla.AcsAPIs)
     
        ## Render on screen
        editor.show()
     
        ## Show this file in the editor
        #~ editor.setText(open("qt4_sci_ac_test.py").read())
        sys.exit(app.exec_())
    Je pense qu'il y a une solution car ça ne marche pas non plus avec les caractères "<", et ">", ce qui peut être très gênant pour les langages genre html ou xml.
    J'ai lu la doc de long en large pendant des heures sans rien trouver, et je commence à désespérer.
    Donc est-ce possible ou dois-je recodonner mon propre "autocomplete"?

  2. #2
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Bonjour.

    Intéressant ton projet. En faire un tuto. pour ici serait pas mal.

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Un exemple de lexer personnel:

    http://bazaar.launchpad.net/~vincent.../paqager/files

    regardes le fichier "lexerDesktop.py"

    Maintenant que j'écris ceci, je me dis que je pourrais tester moi-même l'autocomplétion avec des "\" et autres "<".

    Je te dirais quoi.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Je confirme, l'autocomplétion fonctionne correctement mais pas avec ces caractères là, y compris en utilisant (r"<test") et y compris en mettant le treshold à 3 (fallait au moins essayer ça).

    Je serai toi, je poserai la question sur la ML de pyqt, d'autres ont sûrement déjà rencontré le cas et peut-être résolu.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Merci pour vos réponses.
    Finalement je pense laisser tomber QScintilla et utiliser un QTextEdit avec QSyntaxHighlighter et QCompleter. J'ai un peu l'impression de réinventer la roue, mais au moins je peux faire exactement ce que je veux.
    Je pense que QScintilla est vraiment très pratique en utilisant un lexer intégré ou un lexer personnalisé simple.
    Mais là, je galère trop avec la doc que je trouve parfois incomplète. Il faut se promener entre la doc de pyQScintilla, QScintilla et scintilla, et je retombe souvent sur un truc du genre "ceci est pris en charge par lexer" (en anglais bien sûr), sans expliquer comment l'intégrer dans QsciLexerCustom.
    J'aime pas trop non plus la syntax: self.SendScintilla(QsciScintilla.SCI_GETLINEENDPOSITION, index), obligatoire pour la majorité des cas.

    Intéressant ton projet. En faire un tuto. pour ici serait pas mal.
    En fait l'intégration se fais sans problème, je me suis aidé d'exemples comme:
    http://code.google.com/p/arduino-pyq...?spec=svn7&r=7
    ou
    http://trac.compucell3d.net/svn/cc3d...rrorConsole.py

    Pour conclure je pense que QScintilla est capable de faire tout ce que souhaite, mais vu le temps que j'ai passé à décortiquer la doc, j'aurai eu le temps de faire mon propre éditeur (j'exagère un peu).

  6. #6
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Bonsoir.

    La seule chose qui manque à un QTextEdit avec QSyntaxHighlighter c'est le folding (plier-déplier un code)...

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    La seule chose qui manque à un QTextEdit avec QSyntaxHighlighter c'est le folding (plier-déplier un code)...
    Oui, et les numéros de lignes aussi. Tout ça doit pouvoir se faire, mais c'est un sacrés boulot. J'hésite encore un peu à me lancer.

Discussions similaires

  1. [AutoComplétion] Drop down list
    Par tintin31000 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/10/2005, 15h37
  2. [AJAX] Autocomplétion + méthode Ajax
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/10/2005, 16h24
  3. [Eclipse 3.1] Prob avec l'autocomplétion et la javadoc
    Par agentzaizai dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 23/09/2005, 23h57
  4. [SciTE] Comment faire de l'autocomplétion ?
    Par touff5 dans le forum Autres langages
    Réponses: 1
    Dernier message: 18/01/2005, 10h19

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