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

Python Discussion :

Question de TkInter / Widget text.mark_set


Sujet :

Python

  1. #1
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut Question de TkInter / Widget text.mark_set
    Bonjour,

    j'ai une question très spécifique mais toute simple concernant la fonction mark_set du widget text de TkInter.

    Voilà : je créé une mark à une position donnée dans un texte (avec mark_set), et je voudrais m'en servir pour "mémoriser" cette position.

    C'est à dire que je voudrais pouvoir retrouver la position (i.e l'index) de cette mark.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    position_speciale = 133 # une position que je veux pouvoir retrouver...
    text.mark_set( 'my_mark','1.0+%dc'%position_speciale )
     
    # il se passe plein de trucs... le texte contenu dans text est modifié
     
    position_speciale = text.mark_get_index('my_mark')
    # et voilà, j'ai retrouvé ma position spéciale dans le texte modifié (qui n'est plus forcément 133)
    Tout cela serait parfait si la fonction mark_get_index existait... mais ce n'est pas le cas !

    Y a-t-il quelqu'un qui saurait comment faire ?
    Merci d'avance...

    PS : Ma "bible" de TkInter est ici.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Pourquoi aurait-on besoin d'une méthode .mark_index?
    .index fonctionne pour les "mark".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> import tkinter as tk
    >>> text = tk.Text()
    >>> text.pack()
    >>> text.insert('lqsjkhdklj sqjhskqdh')
    >>> text.insert('end', 'lqsjkhdklj sqjhskqdh')
    >>> text.mark_set('m0', '1.0')
    >>> text.mark_names()
    ('insert', 'current', 'm0')
    >>> text.index('end')
    '2.0'
    >>> text.index('m0')
    '1.0'
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Argl ! en effet...
    Dans ma "bible", on trouve ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    index(index)
        Returns the “line.column” index corresponding to the given index.
            index    : Index specifier.
            Returns : The corresponding row/column, given as a “line.column” string.
    Du coup, je n'avais pas pensé que cette fonction puisse prendre une mark...

    Mais bon... j'ai essayé et ça ne suffit pas, car j'ai plusieurs mark et la fonction index ne semble retourner que le dernier...
    Y a-t-il un moyen d'énumérer les différentes positions des mark de même nom, ou bien suis-je obligé de donner un nom différent à chaque mark ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Mais bon... j'ai essayé et ça ne suffit pas, car j'ai plusieurs mark et la fonction index ne semble retourner que le dernier...
    Y a-t-il un moyen d'énumérer les différentes positions des mark de même nom, ou bien suis-je obligé de donner un nom différent à chaque mark ?
    Une "mark" = une "position". Donc les marks différentes ont des noms différents.
    La position d'une "mark" bouge: amusez vous à insérer du texte "avant".

    Essayez de raconter un peu ce que vous voulez faire. Les "marks" ne sont peut être pas le plus adapté.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Le but final de mon machin est de supprimer certaines parties de mon texte le temps de l'édition, puis de les réinsérer après.
    Du coup, je les cherche, j'insère une mark et je les efface.
    Quand l’édition est terminée, je les réinsère aux endroits des mark.

    Mais finalement, j'ai inséré des mark de noms différent et tout marche très bien...

    Merci de vos réponses.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Pas très clair tout çà, donc je ne suis pas sur que çà le fasse mais jetez un oeil au tags.

    Un exemple quick and dirty:
    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
    import tkinter as tk
    from tkinter.constants import END
     
    app = tk.Tk()
    text = tk.Text(app)
    tk.Button(app, text='hide', command=lambda: text.tag_configure('hide', elide=True)).pack()
    tk.Button(app, text='show', command=lambda: text.tag_configure('hide', elide=False)).pack()
    text.pack()
     
    text.insert(END, '12','hide')
    text.insert(END, 'ab')
    text.insert(END, '34','hide')
    text.insert(END, 'cd')
     
    app.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Super !

    en fait, je n'ai pas besoin d'effacer mes bouts de texte : il me suffit de les cacher.
    Ce qui m'évite les mark et la réinsertion des mes bouts de texte.

    Quelles sont vos références en matière de Tkinter ?
    J'ai l'impression que les miennes sont un peu faibles (http://infohost.nmt.edu/tcc/help/pub...web/index.html, http://effbot.org/tkinterbook et www.java2s.com/Code/Python/GUI-Tk)...

    Encore merci !

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    La documentation Tk est ici.
    La "vraie" documentation est le source.

    C'est plutôt ardu, désolé.

    - W

    PS: De toutes façons, comme tous les GUI disponibles sous Python sont "aliens".
    Difficile de se lancer dans des fonctionnalités avancées sans regarder la documentation native.
    Qt, Wx, GTK,... sont écrits pour des programmeurs C/C++.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Question newbie! mouvement de texte
    Par gillibig dans le forum Flash
    Réponses: 3
    Dernier message: 04/01/2007, 10h06
  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