1. #1
    Candidat au titre de Membre du Club
    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 : 10
    Points
    10

    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 722
    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 722
    Points : 3 958
    Points
    3 958

    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
    Candidat au titre de Membre du Club
    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 : 10
    Points
    10

    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 722
    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 722
    Points : 3 958
    Points
    3 958

    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
    Candidat au titre de Membre du Club
    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 : 10
    Points
    10

    Par défaut Re

    Non,
    pas pour l'instant,

    merci

  6. #6
    Candidat au titre de Membre du Club
    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 : 10
    Points
    10

    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 722
    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 722
    Points : 3 958
    Points
    3 958

    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 722
    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 722
    Points : 3 958
    Points
    3 958

    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 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