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 :

Except error QSplashScreen


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Décembre 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement de composants

    Informations forums :
    Inscription : Décembre 2019
    Messages : 113
    Points : 72
    Points
    72
    Par défaut Except error QSplashScreen
    Bonjour,
    je suis actuellement en train de gérer les éventuelles erreurs lors de l’exécution d'un programme.
    Pour simuler ces erreurs, je place simplement des "fautes de frappe" dans certaines lignes.
    par exemple j'ajoute un "a" en ligne 19 pour voir comment le programme s'en sort.

    NB: je suis sous Spyder.

    En gardant l'exemple ci dessus (cas du "a" en ligne 19 ; et par rapport aux lignes de code ci dessous):
    Le Qsplash qui s'affiche bien, puis l'arrivée sur le "a" implique bien une entrée dans le try de la ligne 31.
    La console m'indique aussi correctement le résultat du print(sys.stderr) et le self.splash.close() est lui aussi correctement executé.

    par contre, après cela, niveau console, il semble que quelque chose ne soit pas très propre là dedans...
    En effet, normalement lorsque je ferme une application, la console me renvoie un : In [#]: que je comprend comme une invitation de la console m'indiquant qu'elle est prête à relancer quelque chose.
    dans le cas ci dessus, la fermeture apparait incomplète, je n'ai pas de In [#] qui apparait dans la console et je suis obligé de restart le noyau pour relancer l'application... pourtant, en visuel, je n'ai aucune application à l'écran...

    Des idées? pour faire un truc un peu plus propre?
    ci dessous le main de lancement,
    merci :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QMessageBox, QSplashScreen
     
    from widgets_instance_glob import creation_de_tous_les_widgets
    from mise_en_forme_demande_glob import construction_fenetre
    from test_prerequis_lancement import test_folder_access
     
    import sys
    import os
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    class Fenetre_Principale(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
     
            try:
                check_parameters = False
                check_parameters = test_folder_access(self)
            except:
                QMessageBox.information(QWidget(), "Pb d'acces reseau")
     
            if check_parameters == True:
     
                try:
                    erreur = "Erreur Lors de la création du Widget principal"
                    self.fenetre_widget = QWidget()
     
                    erreur = "Erreur Lors de la création des widgets relatifs aux onglets"
                    creation_de_tous_les_widgets(self)
     
                    erreur = "Erreur Lors de la construction de la fenetre, voir les layouts"
                    construction_fenetre(self)
     
                    erreur = "Erreur vis à vis du splashscreen"
                    self.splash.finish(self)
     
                    erreur = "Erreur Lors de l'affichage maximisé de la fenetre"
                    self.showMaximized()
     
                except:
                    print(sys.stderr)
                    try:
                        self.splash.close()
                    except:
                        print("pas de splash screen instancié au moment de l'erreur")
                    QMessageBox.information(QWidget(), "Erreur d'execution", erreur)
                    sys.exit(1)
     
     
    if __name__ == "__main__":
        try:
            test_acces = os.listdir(r"path")
        except:
            test_acces = False
            QMessageBox.information(QWidget(), 'Demandeur inconnu ou aucun acces réseau ', "blabla de gestion d'erreur")
     
        if not test_acces == False:
            appli = QApplication(sys.argv)
            fenetre_main = Fenetre_Principale()
            sys.exit(appli.exec_())

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu dois fermer l'application pour récupérer la main.
    sys.exit ne le fait pas pour toi.

    Remplace sys.exit(1) par QtCore.QCoreApplication.quit()

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Décembre 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement de composants

    Informations forums :
    Inscription : Décembre 2019
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    Bonjour,
    merci pour la réponse, j'avais essayé cette solution mais ça ne change rien...
    Le figeage de la console persiste et le restart du noyau reste une nécessité.

    par rapport au message d'hier, j'ai finalement inversé les lignes sys.exit(1) et QMessageBox (en me disant que c'était peut être mieux de faire afficher un Qmessagebox seulement après avoir executé le sys.exit(1) et là, ça marche! (mais je comprend pas vraiment pourquoi...)

    du coup c'est quoi le mieux? utiliser sys.exit(1) avant le QmessageBox ou Utiliser le QCoreApplication.quit() (avant ou après le QMessage ça change rien pour lui... apparemment)?
    si il est préférable d'utiliser le QCore.Apllication.quit(), comment l'utiliser pour qu'il soit pleinement fonctionnel vis à vis de ce que je cherche à avoir?


    ci dessous le code tel qu'il est (qui marche finalement... mais qui n'utilise pas le QCore.application.quit()):


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from PyQt5.QtCore import QCoreApplication
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                except:
                    print(sys.stderr)
                    try:
                        self.splash.close()
                    except:
                        print("pas de splash screen instancié au moment du bug")
                    sys.exit(1)
                    QMessageBox.information(QWidget(), "Erreur d'execution", erreur)
                    #QCoreApplication.quit()

Discussions similaires

  1. exception error message : java.lang.NoSuchMethodError
    Par littlebear dans le forum Struts 1
    Réponses: 3
    Dernier message: 13/02/2009, 11h50
  2. Rescue Exception error code
    Par pjmorce dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 16/05/2008, 11h10
  3. ; excepted error
    Par kiwi645 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/02/2008, 10h57
  4. robustesse, gestion des exceptions ? (Error.pm, Fatal.pm)
    Par ramislebob dans le forum Modules
    Réponses: 13
    Dernier message: 07/07/2006, 10h30
  5. [Struts]Sql Exceptions error
    Par Oby dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/02/2005, 17h49

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