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

PyQt Python Discussion :

Problème bizarre de fermeture de fenêtre


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut Problème bizarre de fermeture de fenêtre
    Bonjour, j'ai un problème bizarre mais c'est sans doute moi.

    J'ouvre de ma fenêtre principale une sous fenêtre par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                # Ouverture de la fenêtre de téléchargement avec la liste des fichiers
                window_telechargement = fenTelechargement(listeFichiers)
                # Pour récupérer les infos de téléchargement
                window_telechargement.signal_fermeturefenTelechargement.connect(self.RetourTelechargement)
                # Affichage de la fenêtre
                window_telechargement.exec_()
    La fenêtre s'ouvre

    Dans la fenêtre (une QDialog) dans l'_init_ j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        def __init__(self, Message, parent=None):
            super(fenTelechargement, self).__init__(parent)
            self.setupUi(self)
            # Récup de la liste des fichiers à télécharger
            self.listeFichiers = Message
            #*Init des connect boutons
            self.initControles()
            #*Lancement du téléchargement
            self.telechargerFichiers()
            #*On ferme la fenêtre
            self.Quitter()
    et dans self.Quitter j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        def Quitter(self):
            # On emet le signal "signal_fermeturefenTelechargement()" avec la liste des résultats de téléchargement des fichiers
            self.signal_fermeturefenTelechargement.emit(self.resultatsTelechargements)
            # fermer la fenêtre
            self.close()
    J'ai un bouton dans cette fenêtre et lorsque je clique dessus ça lance Quitter() et la fenêtre se ferme mais je voudrais que le traitement self.telechargerFichiers() s'effectue (ce qu'il fait très bien) et que la fenêtre se ferme seule.

    Il semble que la fenêtre principale reçoive bien le signal signal_fermeturefenTelechargement lorsque l'on arrive à la fin de l'_init_ et j'ai vérifié ça lance bien Quitter() envoie bien le signal_fermeturefenTelechargement mais arrivé sur la ligne de self.close() rien ne se passe.
    Ensuite je clique sur le bouton de fermeture qui exécute la même procédure de fermeture (Quitter()) et la ça envoie a nouveau le signal signal_fermeturefenTelechargement et cette fois ci ça ferme.

    Pourquoi l'exécution de la procédure de sortie Quitter() ne fonctionne pas totalement lorsqu'elle est lancée de l'init alors que ça roule à partir du bouton.

    C'est l'init le problème ? je ne peut pas fermer à partir du moment ou il n'est pas terminé ? c'est compréhensible mais alors comment lancer une procédure automatique à l'ouverture de la fenêtre et qu'elle se ferme ensuite sans intervention humaine ?

    Je suis preneur de toute info surtout d'ailleurs pour ma propre éducation car le je ne trouve pas comment contourner le problème.

    Merci

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    L'instruction self.close() est censée fermer une fenêtre déjà crée, or, __init__ est seulement en train de le faire: ça ne marche pas. Il faut structurer le code différemment.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    Bonjour tyrtamos et merci pour ta réponse.

    OK je m'en doutais mais je n'avais pas de certitude.

    C'est un fonctionnement logique.

    Je ne sais pas trop comment gérer ce problème, peut-être lancer un thread depuis l'_init_ qui va effectuer le fonction voulue et ensuite fermer la fenêtre mais peut-on fermer une fenêtre depuis un thread lancé de l'_init_ ?
    Je vais voir de ce coté mais c'est tout de même pas incroyable de vouloir ouvrir une fenêtre qui effectue un traitement avec jauge et qui se referme le traitement terminé en renvoyant un résultat à la fenêtre appelante le tout en modal, si ?

    Je crois que je vais faire tourner ce code dans la fenêtre principale et ouvrir juste une fenêtre de jauge qui sera fermée par la fenêtre principale à la fin du traitement.

    En tout cas merci de ta réponse qui m'ôte cette interrogation.


    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    L'instruction self.close() est censée fermer une fenêtre déjà crée, or, __init__ est seulement en train de le faire: ça ne marche pas. Il faut structurer le code différemment.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    Je m'auto répond.

    Je me précipite peut-être un peu mais à priori la solution est d'utiliser QTimer comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTimer.singleShot(500, self.telechargerFichiers)
    dans le code de l'_init_ et donc self.telechargerFichier s'effectue après l'affichage de l'interface et à la fin de cette procédure il y a l'envoi du signal de retour de fenêtre pour récupérer le résultat du traitement dans la fenêtre principale et ensuite un this.close qui ferme la fenêtre sans mon intervention.

    Donc problème réglé

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    Après tests ça marche nickel comme décrit précédemment.

    Je mets le fil en résolut

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

Discussions similaires

  1. Problème de fermeture de fenêtre.
    Par rabbi_jaccob dans le forum MFC
    Réponses: 4
    Dernier message: 16/05/2011, 09h58
  2. Problème de fermeture de fenêtre
    Par L1011 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 25/02/2009, 19h16
  3. Problème de fermeture de fenêtres
    Par zintelix3d dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 12/08/2008, 16h49
  4. API Win32 problème de fermeture de fenêtre
    Par Ano dans le forum Windows
    Réponses: 3
    Dernier message: 13/12/2006, 21h37
  5. Problème de fermeture de fenêtre
    Par TheReturnOfMuton dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 15/06/2006, 12h07

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