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 :

Problème d'affichage dans un event de bouton


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieure en développement Mobile et Objet connecté
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieure en développement Mobile et Objet connecté
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Problème d'affichage dans un event de bouton
    Bonjour,

    J'ai un problème avec une interface.
    Jai un traitement long qui s'effectue au clique sur un bouton.
    J'essaye de changer le curseur avant ce traitement mais il ne s'effectue seulement à la fin de la fin du traitement


    J'ai mis que le code utile à la compréhension de mon problème.
    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
     
    	self.fenetre = Tk();
    	self.btn_envoi = Button(self.fenetre, text = "Envoyer les donnees", command = self.setData);
    	self.lib_info = Label(self.fenetre);
     
    	def setData(self):
    		self.fenetre.config(cursor="X_cursor");
     
    		result = self.traitementLong();
     
    		if result == 1:
    			self.lib_info.config(text = "signal introuvable");
    		elif result == 2:
    			self.lib_info.config(text = "Enregistrement en locale effectue");
    		elif result == 0:
    			self.lib_info.config(text = "Donnee correctement envoyee");
    Comment faire pour appeler le thread qui gère l'affichage dans la fonction setData pour que le curseur change de forme avant d’exécuter le traitement ?

  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,

    Essayez le programme suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> import Tkinter as tk
    >>> import time
    >>>
    >>> def callback():
    ...     root.configure(cursor="X_cursor")
    ...     time.sleep(1)
    ...
    >>> root = tk.Tk()
    >>> btn = tk.Button(root, text='Go', command=callback)
    >>> btn.pack()
    >>>
    >>> tk.mainloop()
    vous devriez constater le même soucis qu'avec le votre car j'ai remplacé "calcul long" par time.sleep(1).

    Un GUI tourne dans un seul thread. Lorsque "callback" est appelé par le GUI, il ne pourra faire ses mises à jour qu'après son "return". Ici après 1 seconde.
    Normalement, on pousse les "calcul long" dans un thread "à part" pour ne pas "geler" l'interface utilisateur. Un autre méthode est de forcer les mises à jour pendant les calculs avec des appels à root.update / root.update_idletasks mais c'est une solution difficile à utiliser.
    note: ici, çà va fonctionner mais comme çà casse la sérialisation des appels aux callbacks effectué par le GUI, à l'utiliser sans discernement on s'embourbe dans des problèmes de synchronisation.

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

  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieure en développement Mobile et Objet connecté
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieure en développement Mobile et Objet connecté
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup

    La gestion d'un thread aurai été mon dernier recours
    update et update_idletasks ne sont pas si compliqué à utiliser
    Avec ton exemple voilà ce que ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> import Tkinter as tk
    >>> import time
    >>>
    >>> def callback():
    ...     root.configure(cursor="X_cursor")
    ...     root.update_idletasks()
    ...     root.update()
    ...     time.sleep(10)
    ...
    >>> root = tk.Tk()
    >>> btn = tk.Button(root, text='Go', command=callback)
    >>> btn.pack()
    >>>
    >>> tk.mainloop()
    Encore merci

  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 Picoo Voir le message
    La gestion d'un thread aurai été mon dernier recours
    update et update_idletasks ne sont pas si compliqué à utiliser
    Disons qu'en cas de comportements étranges d'un programme construit ces fonctionnalités, pas grand monde essaiera de comprendre ce qu'il se passe. Mais rien ne vous interdit de vivre dangereusement en croisant les doigts très fort...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/04/2006, 22h06
  2. Problème d'affichage dans un tableau
    Par claralavraie dans le forum ASP
    Réponses: 13
    Dernier message: 21/12/2005, 15h45
  3. [JSTL] Problème d'affichage dans un <c:forEach>
    Par zwck dans le forum Taglibs
    Réponses: 6
    Dernier message: 05/11/2005, 21h35
  4. Problème d'affichage dans un composant TScrollBox
    Par erossi dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/09/2005, 11h29
  5. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00

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