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 :

Stopper un thread aprés clic sur barre titre [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut Stopper un thread aprés clic sur barre titre
    Bonjour à tous,

    Voici mon problème :

    je voudrais savoir s'il était possible de capter un évènement de clic sur la barre de titre d'une application, en fait, je voudrais que l'utilisateur ne puisse pas déplacer la fenêtre pendant l'exécution d'un thread.

    1_ les coordonnées de la souris ne sont plus captées en cliquant sur la barre de titre.

    2_ j'ai pensé aussi à faire disparaître la barre de titre avec overrideredirect(1) mais cette solution ne me convient pas.

    Si l'utilisateur essaie de déplacer la fenêtre, je voudrais que l'action en cours s'arrête net.

    Si quelqu'un a le temps d'éclairer ma lanterne je le remercie d'avance.

    E.

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

    en fait, je voudrais que l'utilisateur ne puisse pas déplacer la fenêtre pendant l'exécution d'un thread.
    Si vous voulez rendre la "fenêtre" inactive pendant l'exécution du thread, root.wm_configure('-disabled', True) devrait fonctionner.

    Si l'utilisateur essaie de déplacer la fenêtre, je voudrais que l'action en cours s'arrête net.
    Vous rendez vous compte que ce scénario là est un peu différent?
    Les déplacements génèrent un event de type <Configure>, vous pourriez faire un bind au lancement du thread dont l'action serait de...

    Pourquoi ne pas créer une Toplevel qui affiche la progression du thread et offre un Button pour "Cancel" ?
    Faire ce cette Toplevel une window modale empêcherait l'utilisateur de faire autre chose qu'attendre la fin ou de clicker "Cancel".
    On est un peu plus proche de ce que fait une interface "classique"...

    a vous de voir.

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

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut [Python 3.X] Stopper un thread aprés clic sur barre titre
    Bonsoir wiztricks et merci d'avoir répondu,

    Tout d'abord c'est la fenêtre principale de mon application que l'on ne devrait pas déplacer pendant le thread, je viens d'essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenp.wm_configure('-disabled', True)
    et une exception a été levé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'tkapp' object has no attribute 'wm_configure'
    D'autre part, dans mon application , j'ai mis en oeuvre des Toplevel modales et je suis bien conscient du fonctionnement de ce type de fenêtre, et d'ailleurs
    je l'utilise assez fréquement pour justement isoler une action , un thread etc, ce qui empêche l'action sur les boutons de la fenêtre située au-dessous (et c'est tant mieux), mais cela n'empêche pas de déplacer cette fenêtre (en dessous) en maintenant le clic gauche enfoncé sur la barre de titre. La fenêtre d'en dessous est désactivée tant que l'on a pas validé ce qu'on doit valider ou annulé ce que l'on doit annuler dans la Toplevel en cours, je pensais que la fenêtre d'en dessous serait désactivée au point de ne pas pouvoir la draguer, mais non !

    J'utilise généralement cette forme pour écrire une fenêtre Toplevel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Aide(tkinter.Toplevel) :
        """
        L' aide contextuelle
        """
        def __init__(self, maitre, titre) :
            tkinter.Toplevel.__init__(self, maitre)
            self.protocol("WM_DELETE_WINDOW", self.destroy)
            self.title(titre)
            self.update_idletasks()
            self.transient(self.master) # fenêtre modale ###########################
            self.grab_set() # capte les événements à son profit ####################
            self.wait_window()
    ...et ça marche parfaitement.

    Dans mon cas , (mon problème), je voudrais seulement que l'utilisateur ne puisse pas draguer la fenêtre principale pendant un thread, ce thread est une lecture de sons midi illustrés par des grilles d'accords de guitare, chaque diagrammes lus est joué et reporté sur un manche de guitare,
    chaque diagramme est une instance d'une classe où chaque point (les notes) sont fabriqués en temps réels, tout ceci fonctionne à merveille, sauf que si on a le malheur de vouloir déplacer la fenêtre principale en maintenant le clic gauche enfoncé, l'application freeze, voire plante !

    Si je pouvais binder la barre de titre de la fenêtre principale, ce serait parfait.

    en aparté :
    Mon application est un immense dictionnaire d'accords pour instruments à cordes, dans la fenêtre principale on peut paramétrer un manche de 1 à 6 cordes et de 1 à 24 cases
    on a accés à presque une centaine de types d'accords, l'utilisateur peut créer ses propres grilles d'accords , les sauvegarder sur le disque , les lire, les écouter
    Etant professeur de guitare et musicien, cet outil me sert énormément, n'ayant pas trouvé d'équivalent auparavant, j'ai décidé de le concevoir, n'étant pas programmeur, j'ai été obligé d'étudier comme un forcené, éplucher les forums, imprimer du papier pour étudier ailleurs que devant l'ordi etc,
    Quand j'étudie un outil python, je crée des exercices pour me l'approprier , le transformer, le digérer , le comprendre, mais quelquefois , je sèche, voilà je ne voulais pas m'écarter du sujet, juste vous donner une idée de ce projet que je développe avec passion.

    Je vais chercher du coté des wm_configure, car ça, je ne connaissais pas.

    Et merci wiztricks de votre attention.
    E.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 706
    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 706
    Par défaut
    Oops, il s'agissait de .wm_attributes('-disabled', True)

    Citation Envoyé par elafitz Voir le message
    Dans mon cas , (mon problème), je voudrais seulement que l'utilisateur ne puisse pas draguer la fenêtre principale pendant un thread, ce thread est une lecture de sons midi illustrés par des grilles d'accords de guitare, chaque diagrammes lus est joué et reporté sur un manche de guitare,
    chaque diagramme est une instance d'une classe où chaque point (les notes) sont fabriqués en temps réels, tout ceci fonctionne à merveille, sauf que si on a le malheur de vouloir déplacer la fenêtre principale en maintenant le clic gauche enfoncé, l'application freeze, voire plante !
    Tant que vous ne faites pas de modifications du GUI depuis les threads, çà ne devrait ni "freezer", ni "planter",... juste être plus lent.

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

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut [Python 3.X] Stopper un thread aprés clic sur barre titre
    bonjour wiztricks,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenp.wm_attributes('-disabled', True)
    fonctionne, et ça convient parfaitement à ce que je voulais obtenir :
    je ne serais pas obligé de faire interrompre le thread au cas où l'utilisateur voudrais déplacer la fenêtre puisqu'il ne pourra plus !

    en lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenp.wm_attributes('-disabled', True)
    aprés le stop de la lecture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenp.wm_attributes('-disabled', False)
    De plus rien n'a changé au niveau de la vitesse du thread, tout est fluide.
    Je vais parfaire mes connaissances du Windows Manager, il est vrai que j'ai quelques lacunes à son sujet.
    Merci encore pour les conseils et votre attention.
    E.

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

Discussions similaires

  1. [XL-2007] empecher un double clic sur barre titres sous excel 2007
    Par zanys dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/04/2017, 14h05
  2. [MySQL] Comment empêcher le renvoi d'un formulaire après clic sur rafraichir
    Par pcdj dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 18/01/2007, 23h42
  3. [MySQL] validation aprés clic sur buton submit
    Par bwatex dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/11/2006, 14h50
  4. Réponses: 4
    Dernier message: 28/11/2006, 13h55
  5. [JSP] Réaliser un traitement après clic sur un lien donné
    Par Ataman dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/06/2006, 10h42

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