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 :

Selection widget text. Manque un caractère


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut Selection widget text. Manque un caractère
    Bonjour,

    Voici le code:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import tkinter
     
    def recuperation_mot_saisie(event=None):
        """Fonction qui permet de récupérer le dernier <<mot>> qui est entrain d'être saisi"""
        position=texte1.index(tkinter.INSERT)
        nmbChar = tkinter.IntVar()
        delimitateur=r'[\s\n,?;./:!]'
        position_fin=texte1.search(delimitateur,index=position,stopindex=tkinter.END,regexp=1,count=1)
        position_debut=texte1.search(delimitateur,index=position,stopindex="1.0",backwards=1,regexp=1,count=1)
        if position_debut=="":
            position_debut="1.0"
        if position_debut=="1.0":
            mot=texte1.get(position_debut,position_fin)
        else:
            mot=texte1.get(position_debut+'+1c',position_fin)
        print(mot)
     
     
     
    root=tkinter.Tk()
    texte1=tkinter.Text(root)
    texte1.config(font=('courier', 10),
                  background='white', foreground='black',
                  insertbackground='black'
                  )
    texte1.focus_set()
    texte1.pack()
     
    liste_complement=tkinter.Listbox(root)
    liste_complement.pack()
     
    texte1.bind('<KeyPress>', recuperation_mot_saisie)
     
    root.mainloop()
    Si vous testez le code, vous pouvez voir qu'au mot affiché, il manque toujours le caractère (notamment la lettre...) qui a déclenché la commande.
    Comment peut-on résoudre le problème?
    Merci pour vos réponses.
    Gabriel

  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,

    '<KeyRelease>' sinon la fonction intervient avant que le caratère ne soit écrit.

    @+

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    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 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Salut,
    A l'event <KeyPress>, le caractère tapé n'est pas encore dans le widget.
    Ensuite, lorsqu'un caractère alphanumérique est entré, il sera toujours placé à la position INSERT - 1c (INSERT avance) mais on pourra commencer un nouveau mot ou ajouter des caractères à un mot existant.
    Enfin, le widget dispose déjà de fonction qui trouvent début et fin d'un mot.

    Cela dit pour récupérer le mot en cours de modification, je ferais plutôt ainsi:
    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
    import tkinter as tk
     
    class Text(tk.Text):
        def __init__(self, parent=None, **kwds):
            super().__init__(parent, **kwds)
            self.bind('<KeyRelease>', self.onKeyRelease)
     
        def onKeyRelease(self, event):
            ch = event.char
            if ch.isalnum():
                print (self.get_current_word())      
     
        def get_current_word(self):
            cpos = self.index('insert')
            ppos = self.index('insert - 1c')
            pch = self.get(ppos, cpos)
            if pch.isalnum():
               return self.get(ppos + 'wordstart', cpos + 'wordend').strip()
            else:
               return self.get(cpos, cpos + 'wordend').strip()    
     
    text = Text()
    text.pack()
    tk.mainloop()
    Cordialement,
    - W

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    ImpeccableS.

    Merci.

    Gabriel

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

Discussions similaires

  1. safari : textarea et selection de texte
    Par zax-tfh dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 06/02/2006, 02h37
  2. DÉBUDANT : Détecter la selection du text dans un Edit .
    Par LibrairieSI dans le forum Windows
    Réponses: 1
    Dernier message: 16/10/2005, 00h54
  3. [Tkinter] widget Text
    Par t_om84 dans le forum Tkinter
    Réponses: 8
    Dernier message: 17/06/2005, 09h30
  4. Mode texte 80*50 caractères
    Par lorenfar dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/05/2005, 15h08
  5. TEdit : selection du texte et autre fonction
    Par Odulo dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/08/2002, 14h27

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