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 :

Python 3.9.1 : Tkinter - lorsque l'on clique sur un bouton le bouton reste enfoncé ! [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Invité
    Invité(e)
    Par défaut Python 3.9.1 : Tkinter - lorsque l'on clique sur un bouton le bouton reste enfoncé !
    Bonjour,

    Je rencontre le problème suivant lorsque je clique sur un bouton ce denier reste visuellement enfoncé. (voir copie d'écran)
    une fois cliqué :

    Le bouton fonctionne correctement même si ce dernier à l'apparence d'être enfoncé !
    J'ai expurgé mon code au maximum jusqu'à être en mesure d'identifier le problème.
    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
     
    	#Chargement des modules 
     
    	import tkinter as tk
    	import tkinter.ttk as ttk
    	from tkinter.messagebox import *
     
     
    	Debug = 1
     
    	def OnClik_OM_BoutonAjouter(event):
    		if Debug ==1 : print('OnClik_OM_BoutonAjouter')
    		tk.messagebox.showerror('itre', 'Indicatif inconnu',parent=fenetre)
     
     
    	fenetre = tk.Tk()
    	fenetre.geometry("1127x558+51+0")
    	fenetre.minsize(120, 1)
    	fenetre.maxsize(1284, 701)
    	fenetre.resizable(1,  1)
     
    	fenetre.Button_OM_Ajouter = tk.Button(fenetre)
    	fenetre.Button_OM_Ajouter.place(relx=0.475, rely=0.846, height=24, width=67 , bordermode='ignore')
    	fenetre.Button_OM_Ajouter.configure(text="Ajouter")
     
     
    	# Click Bouton
    	fenetre.Button_OM_Ajouter.bind('<Button-1>', OnClik_OM_BoutonAjouter)
     
     
    	fenetre.mainloop()
    J'ai constaté que lorsque je commente la ligne :

    tk.messagebox.showerror('ARAM95-QSLs', 'Indicatif inconnu',parent=fenetre)

    Le bouton reprend son apparence initiale après avoir cliqué sur le bouton.

    Auriez-vous une idée pour expliquer et/ou corriger le problème ?

    Bien cordialement,

    Christian
    Images attachées Images attachées   

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

    Vous n'auriez pas de problème en utilisant le paramètre command=... plutôt que de faire votre propre .bind.

    Pour le reste, vous pourrez constater qu'un bouton réagit lorsqu'on clique dessus même lors qu’aucun callback n'a été déclaré. Pour réagir, c'est que son code prend déjà en compte la pression sur le bouton de la souris.

    Observez comment il le fait... Un appui long, il reste appuyé, un appui bref, il reste assez longtemps appuyé pour qu'on le voit réagir. On peut imaginer un action qui se déclenche à Button-Press et un timer qui dure un peu après Button-Release.

    Que se passe-t-il lorsqu'en plein milieu de cette logique là on ajoute une attente? Button-Release reste dans la pile... (et le Button reste enfoncé).

    - W

  3. #3
    Membre habitué
    Homme Profil pro
    Vagabong étudiant en annalyse du signal.
    Inscrit en
    Avril 2019
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Vagabong étudiant en annalyse du signal.
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 124
    Points : 163
    Points
    163
    Par défaut
    De façon générale dans Tkinter, quand l’appui d'un bouton d’éclanche l’exécution d'une fonction, le bouton reste enfoncé tant que la fonction n'a pas retournée.
    Si la fonction met du temps à s’exécuter mais qu'on ne veut pas que le bouton reste enfoncé, il faut se débrouiller pour que la fonction appelée par le bouton retourne immédiatement, quitte à utiliser un Thread avec le module threading.

  4. #4
    Invité
    Invité(e)
    Par défaut Problème résolu - Merci pour les informations.
    Bonjour,

    Merci pour les informations.

    J'ai revisité mon code pour utiliser l'option command en lieu et place du bind.

    Le problème est résolu.

    Cordialement

    Christian.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/11/2012, 18h28
  2. Réponses: 0
    Dernier message: 07/03/2012, 00h58
  3. Réponses: 1
    Dernier message: 21/10/2011, 20h39
  4. Réponses: 2
    Dernier message: 30/03/2007, 15h33
  5. Réponses: 3
    Dernier message: 20/02/2007, 17h13

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