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 :

[Widget Text] Retrouver l'index d'un tag ?


Sujet :

Tkinter Python

  1. #1
    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 [Widget Text] Retrouver l'index d'un tag ?
    Bonjour,

    Existe t'il un moyen de retrouver, directement, l'index pour un tag donné sans passer par Text.tag_ranges(tag) ?
    Soit le code exemple suivant
    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
    import tkinter as tk
     
     
    def Linked(a, b):
        for tags in (a, b):
            text.tag_config(tags, foreground="blue", underline=1)
            text.tag_bind(tags, "<Enter>", lambda e: text.config(cursor="hand2"))
            text.tag_bind(tags, "<Leave>", lambda e: text.config(cursor=""))
        text.tag_bind(a, "<Button-1>", lambda e: text.see(text.tag_ranges(b)[0]))
        text.tag_bind(b, "<Button-1>", lambda e: text.see(text.tag_ranges(a)[0]))
     
     
    root = tk.Tk()
    root.title("tkinter.Text sample : tag see")
    text = tk.Text(root)
    #
    text.insert(tk.END, "(1)\n", 1)
    for v in range(100):
        text.insert(tk.END, "BLABLABLA\n")
    text.insert(tk.END, "(1) Tag", 2)
    Linked(1, 2)
    #
    text.pack()
    tk.Button(root, text="Quit", command=root.destroy).pack(pady=5)
    root.mainloop()
    Sachant que les tags sont uniques je souhaiterais (il me semble avoir déjà vu du code dans ce sens mais je n'ai rien noter dans mon cookbook...) un text.see(text.tag_index(b)) moins approximatif qu'un text.tag_ranges(tag)[0].

    Un text.insert(tk.END, "texte", (1, tk.END)) ? Cela implique de le faire au fur et a mesure...
    Une idée sur la chose ?

    Merci d'avance

    Sans doute inutile comme question vu que les tags sont uniques mais après tout c'est dimanche

    @+

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 333
    Points : 36 853
    Points
    36 853
    Par défaut
    Salut,

    On peut associer a un tag a un ensemble de segments du texte.
    Chaque segment étant définit par [s, e[ ou s et e sont des "index" au sens Tk.Text i.e. de la forme '%d.%d' % (l, c) avec l: n° ligne, c: n° colonne.

    .tag_ranges(name) retournera la liste (ordonnée) des segments associés au tag name.
    Si on veut récupérer le "s" du premier segment et le "e" du dernier, on peut passer par:
    • first = w.index('%s.first' % name)
    • last = w.index('%s.last' % name)

    note: si on est assuré qu'il n'y a qu'un seul segment associé au tag name, çà peut répondre à la question - pour autant que je l'ai comprise!.

    Il y a aussi la possibilité de récupérer le segment tagué name après ou avant une position dans le texte (.tag_nextrange(name, index), .tag_prevrange(...))

    Un text.insert(tk.END, "texte", (1, tk.END)) ? Cela implique de le faire au fur et a mesure...
    .tag_add(name, ...) accepte une liste de segments à "taguer" avec name.
    On peut donc taguer le texte à partir d'une interprétation du stream de caractère lus ou 'après' pour souligner le résultat d'un search (par exemple).

    - W

Discussions similaires

  1. Erreur sur champ text pour un index Full-Text
    Par Steph82 dans le forum Outils
    Réponses: 5
    Dernier message: 06/01/2011, 14h08
  2. Widget Text et mise en forme des sélections
    Par Chris33 dans le forum Tkinter
    Réponses: 1
    Dernier message: 20/09/2006, 09h10
  3. colorier une colonne dans un widget text
    Par Chris33 dans le forum Tkinter
    Réponses: 4
    Dernier message: 14/09/2006, 11h20
  4. [tkinter] widget text et scrollbar
    Par jojolapine dans le forum Tkinter
    Réponses: 3
    Dernier message: 29/04/2006, 15h58
  5. [Tkinter] widget Text
    Par t_om84 dans le forum Tkinter
    Réponses: 8
    Dernier message: 17/06/2005, 09h30

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