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 :

Entry en cours d'utilisation et suspension d'une fonction de type Event [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'étude et conception
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'étude et conception
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Entry en cours d'utilisation et suspension d'une fonction de type Event
    Bonjour,

    J'ai un soucis dans mon script ça fait quelques jours que j'y réfléchis donc je me tourne vers vous pour en savoir plus.

    J'utilise un champ d'entrée de texte Entry dans Tkinter qui permet d'afficher le texte entré dans une fenêtre après validation.
    Seulement la barre espace qui déclenche une fonction de type event, déclenche la fonction lorsque j'entre du texte dans le champ d'entrée (à part si j'écris une phrase sans espace ce qui est rare).

    Comment puis je faire pour pouvoir utiliser la barre espace en écrivant dans le champ d'entrée sans déclencher la fonction ?

    je pense que la première étape consiste à récupérer une info sur l'utilisation du champ d'entrée, mais je n'y parviens pas.

    J'ai mis les lignes concernées, je peux en mettre plus s'il faut.

    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
     
    def start_and_stop(event):
        global flag
        if flag == 0:
                flag = 1
                move()
                return 0
        if flag == 1:
                stop_it()
                return 0
     
    def text_enter(event):
        ch.set(chmp1.get())
        chmp1.delete(0,END)
        can1.itemconfigure(text1, text = ch.get(), fill = tc)
     
    fen1 = Tk()
    ch = StringVar()
    ch.set("ch.set")
    chmp1 = Entry(fen1, background = 'white', state = NORMAL)
    chmp1.bind("<Return>",text_enter)
    chmp1.pack(side = TOP)
    fen1.bind("<space>", start_and_stop)
    can1=Canvas(fen1, bg = 'black',height = 500, width = 1400)
    can1.pack(side=BOTTOM, padx = 1, pady = 2)
    text1 = can1.create_text(x1,y1, text = "Entrez un message",fill='white', activefill = 'yellow', font = ('Helvetica','50'))
    b1 = Button (fen1, text = "Quitter",command = fen1.quit).pack(side = TOP)
    b2 = Button (fen1, text = "Démarrer/Arreter", command = manual_start_and_stop).pack(side = TOP)
    b3 = Button (fen1, text = "Couleur texte", command = change_text_color).pack(side = TOP)
    b4 = Button (fen1, text = "Couleur fond", command = change_bg_color).pack(side = TOP)
    b5 = Button (fen1, text = "Afficher les informations", command = display_item).pack()
    fen1.mainloop()
    Merci à vous

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Chris lebar Voir le message
    Comment puis je faire pour pouvoir utiliser la barre espace en écrivant dans le champ d'entrée sans déclencher la fonction ?
    Lorsque l'utilisateur tape <space> comment savoir qu'il fait partie du texte à saisir plutôt que signaler la fin de la saisie?
    Le plus simple dans ce cas est d'avoir un Button "Valider" sur lequel l'utilisateur cliquera lorsqu'il sera satisfait de sa saisie. Ce qui permettra de saisir n'importe quel caractère.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé d'étude et conception
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'étude et conception
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci de vous pencher sur mon pblm.

    Mon texte est validé par la touche entrer <Return> donc jusqu'ici pas de soucis pour valider mon texte (voir script du premier post).
    La touche espace est associée à une fonction qui permet la suspension ou à la reprise d’événement, je ne comprend pas comment un bouton "valider" (qui remplacerai <Return>) me permettrai d'éviter que la fonction associée à l'espace ne se déclenche ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Chris lebar Voir le message
    je ne comprend pas comment un bouton "valider" (qui remplacerai <Return>) me permettrai d'éviter que la fonction associée à l'espace ne se déclenche ?
    Ca revient à dire que pour éviter que le .bind('<space>', votre_fonction ne se déclenche lors de la saisie (et difficile à interpréter), il suffit de supprimer ce .bind.
    Après vous pouvez faire plus compliqué en gérant un état "pendant_la_saisie" puis en poussant le <space> dans l'Entry le cas échéant.

    Vous pouvez aussi réfléchir à pourquoi ont été créées des fenêtres de dialogue: on crée une fenêtre vierge de tout .bind pendant que l'application est "suspendue" le temps que l'utilisateur fasse sa saisie...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    En effet, je ne suis pas sûr que ce soit une bonne idée d'utiliser la touche espace, car si un des boutons a le focus, espace équivaut à un click.
    Sinon, peut-être en testant si ton entry a le focus quand tu appuies sur espace...

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Chargé d'étude et conception
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'étude et conception
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Oui je suis en train de plancher sur la réponse de wiztricks et sur la votre car elles se rejoignent...

    Cela dit, vous dites tous deux que l'on peut tester le focus sur le Entry et j'essaye de le faire.

    J'ai trouvé l’existence de la méthode .unbind qui me permettrait de suspendre l’événement associé à '<space> ' il me suffit de savoir comment utiliser 'takefocus' ou 'sate' pour avoir un état de l'activité de la saisie...

    Enfin, je lâche pas le sujet tant qu'il n'est pas résolu, merci à vous

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Chargé d'étude et conception
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'étude et conception
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je marque ce sujet comme résolu,

    Je me rend compte que la zone de texte reste active dès lors que l'on clique dessus et comme je n'ai pas d'autre zone de texte il est difficile de la désactiver (à part en cliquant dans un autre programme), donc difficile de prévoir une fonction qui déclenche à son utilisation et qui stoppe lorsqu'elle est inactive...puisque la zone est tout le temps active.

    Sans avoir trouvé la solution mais en ayant compris qu'un raccourcis clavier doit être choisi soigneusement grâce à wiztricks et pierjean.
    J'ai pour cela changer la touche d'appel de la fonction par '<Shift_R>' qui est moins souvent utilisé, en général et dans ce script que '<Space>'.

    Je clos ce sujet parce que d'autres problèmes plus fondamentaux sont à régler sur ce script, et celui ci était un faux problème.
    Moralité : ne te cherche pas de problèmes tant que tu n'est pas sûr qu'un autre ne te tombera pas dessus

    Merci de vos conseils et remarques, et aussi merci pour les cours et tutoriels pour apprendre Python

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/05/2007, 13h21
  2. [SQL SERVER 2005] Utilisation de Exec dans une fonction ?
    Par Dadou74 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/09/2006, 22h09
  3. Utilisation de fstream dans une fonction
    Par Silverstone dans le forum SL & STL
    Réponses: 7
    Dernier message: 22/07/2006, 09h55
  4. utilisation de getdate() dans une fonction ?
    Par devdev dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/03/2005, 17h40
  5. Utilisation de Getdate dans une fonction
    Par BaronSamdi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/11/2004, 10h12

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