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

Tkinter Python Discussion :

déplacer le curseur dans un widget text


Sujet :

Tkinter Python

  1. #1
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut déplacer le curseur dans un widget text
    bonjour,

    j'aimerais savoir comment déplacer le curseur du widget text.

    En fait, je cherche à désactiver l'événement <Left> d'origine

    pour le remplacer par un qui effectuerait un traitement supplémentaire et qui ne déplacerait pas le curseur systématiquement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    text = Text()
    text.unbind_class( 'Text', "<Key-Left>"   )
     
    text.bind( "<Key-Left>", left   )
     
    def left( event ) :
        #Si condition
            #déplacer le curseur
        #Sinon
           #pass
    J'ai vu que dans le code tlc du widget Text il y a ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bind Text <Left> {
            tk::TextSetCursor %W insert-1displayindices
            }
    Malheureusement aucune méthode Text.setcursor n'a été implémentée dans Tkinter .

  2. #2
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    J'ai trouvé cette solution mais je n'ai pas bien compris à quoi sert after_idle. Sans lui, il y a des bugs si je laisse enfoncée la touche left ou si le texte est juste "--> "

    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
     
    from tkinter import *
     
     
    def foo( event ):
        def testPosition():
            if text.compare( "insert", "<=", "1.3"):
                text.event_generate( "<Right>" )
     
        text.after_idle( testPosition )
     
     
     
    root = Tk()
    text = Text( root )
    text.pack()
     
    text.insert("end", "--> hello world")
     
    text.bind( "<Left>", foo )
     
    mainloop()
    Plutôt que deux événements soient générés ( <Left> et <Right> ) il n'y a pas une méthode pour empêcher le <Left> ???

  3. #3
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def foo(event):
        if text.compare("insert", "<=", "1.3"):
            return "break"

  4. #4
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    C'est génial Merci beaucoup

    Sais-tu comment cela fonctionne en interne ?
    Simple curiosité. Cela vide la pile d'événement ?

  5. #5
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    La valeur "break" "stoppe" l'évènement.
    On l'utilise pour modifier les bindings standards. (Ce que tu cherches à faire dans ce cas précis).

  6. #6
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut Une autre solution
    Merci.

    j'ai trouvé comment faire pour vraiment déplacer le curseur. Mais cette solution est plus compliquée que celle de pierjean

    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
     
    from tkinter import *
     
    def left( event ) :
        text.mark_set( "insert", "% s-1c" % "insert" )
     
     
    root = Tk()
     
    text = Text( root )
    text.unbind_class( 'Text', "<Key-Left>"   )
    text.bind( "<Key-Left>", left   )
     
    text.insert("end", "hello world")
    text.pack()
     
    mainloop()

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/05/2012, 09h24
  2. Réponses: 8
    Dernier message: 02/04/2008, 17h30
  3. couleur du curseur dans un widget text Tk
    Par thieduvar dans le forum Tkinter
    Réponses: 1
    Dernier message: 08/07/2007, 22h39
  4. [VB6] position du curseur dans une zone texte et insertion caractere
    Par tim69000 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/05/2006, 09h52
  5. Probleme d'affichage du curseur dans un chp texte avec firef
    Par dadovb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/10/2005, 12h31

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