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 :

position du curseur dans widget text


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Points : 16
    Points
    16
    Par défaut position du curseur dans widget text
    Bonjour,
    C'est assez curieux, il semblerait que la seule façon de déplacer le curseur dans un widget Text est la souris ou le clavier.
    J'ai trouvé : widget.mark_set(INSERT,'nouvelle position')
    par exemple monwidget.mark_set(INSERT, END)

    il se trouve que cette méthode modifie la position d'insertion du texte qui est inséré par la méthode .insert(INSERT,'texte') mais pas celle du texte qui est entré au clavier.

    Est ce que vous avez une idée, Merci

    ma config: python 3.3, tkinter 8.5, windows 7

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Citation Envoyé par aoumnad Voir le message
    il se trouve que cette méthode modifie la position d'insertion du texte qui est inséré par la méthode .insert(INSERT,'texte') mais pas celle du texte qui est entré au clavier.

    Pour moi cela fonctionne...
    Que donne cela chez vous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import tkinter as tk
     
    root = tk.Tk()
    text = tk.Text(root)
    text.insert(tk.END, "AZERTYUIOP")
    text.pack()
    text.focus_set()
    text.mark_set(tk.INSERT, "1.5")  # Ligne 1 colonne 5
    root.mainloop()
    Toujours pareil ?

    @+
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    merci pour ta réponse,

    En effet, ça marche,
    sauf que moi, je prend le focus en cliquant avec la souris, j'ai associé un bind pour détecter cet évènement. Ça marche la première fois. Si je clique dans une autre fenetre, puis je reviens, normalement, au moment où je reclique dans ma fenetre, ça doit refaire le positionnement du curseur, mais ça ne semble pas marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import tkinter as tk
     
    def curseur(bidon):
        text.mark_set(tk.INSERT, "1.5")  # Ligne 1 colonne 5
     
    root = tk.Tk()
    text = tk.Text(root)
    text.insert(tk.END, "AZERTYUIOP")
    text.pack()
    text.bind("<FocusIn>", curseur)
    #text.focus_set()
    root.mainloop()
    merci,

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Re,

    J'ai effectivement vu des effets semblables suivant les wm.

    Ceci arrange la chose ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    text.bind('<Enter>', lambda e: text.focus_set())
    @+
    Merci d'utiliser le forum pour les questions techniques.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Re
    Non,
    pas pour l'instant,

    merci

  6. #6
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Re
    Ça y est, voici une solution grâce à junuxx sur stackoverflow
    Je n'ai pas très bien compris, il semble qu'il fallait donner le temps au widget de prendre le focus avant de modifier la mark INSERT


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def curseur(bidon):
        fp.after(10, lambda: edit.mark_set(INSERT, END))
    Merci beaucoup PauseKawa


    A+

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut


    Et qui vous dit que 10 est suffisant ?
    A la limite jouer sur le _register :
    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
    import tkinter as tk
     
     
    def markset(widget, value):
        global currentmark
        widget.mark_set(tk.INSERT, value)
        currentmark = widget.bind("<ButtonRelease-1>",
                                  lambda e: widget.mark_set(tk.INSERT, value)
                                            or widget.deletecommand(currentmark))
     
     
    insert = "1.5"
    root = tk.Tk()
    text = tk.Text(root)
    text.insert(tk.END, "AZERTYUIOP")
    text.insert_set = lambda val: markset(text, val)
    text.pack()
    text.insert_set("1.5")
    text.focus_set()
    root.mainloop()
    Ou un truc du style mais c'est trop 'léger' de jouer sur un timing.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Et si voulez vraiment un .after() pensez a faire un .update() avant

    @++
    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
     
    import tkinter as tk
     
     
    def curseur(bidon):
        text.update()
        text.mark_set(tk.INSERT, currentset)
     
     
    currentset = "1.5"
    root = tk.Tk()
    text = tk.Text(root)
    text.insert(tk.END, "AZERTYUIOP")
    text.pack()
    text.bind("<ButtonRelease-1>", curseur)
    text.after(5000, lambda: globals().__setitem__("currentset", "1.2"))
    root.mainloop()
    Merci d'utiliser le forum pour les questions techniques.

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

Discussions similaires

  1. recuperer la position x y du curseur dans une texte area
    Par nsanabi dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 26/03/2009, 12h31
  2. Réponses: 8
    Dernier message: 02/04/2008, 17h30
  3. [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
  4. Réponses: 1
    Dernier message: 11/03/2006, 14h03

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