Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 712
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 712
    Points : 3 899
    Points
    3 899

    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 :
    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 :
    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 712
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 712
    Points : 3 899
    Points
    3 899

    Par défaut

    Re,

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

    Ceci arrange la chose ?
    Code :
    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 :
    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 712
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 712
    Points : 3 899
    Points
    3 899

    Par défaut



    Et qui vous dit que 10 est suffisant ?
    A la limite jouer sur le _register :
    Code :
    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 712
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 712
    Points : 3 899
    Points
    3 899

    Par défaut

    Et si voulez vraiment un .after() pensez a faire un .update() avant

    @++
    Code :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •