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 :

Indicateur d'activité


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Par défaut Indicateur d'activité
    Bonjour,

    J'aimerais qu'un throbber s'affiche dans mon interface lorsqu'un script est lancé.
    Le throbber s'affiche mais au mauvais moment..

    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
        def startThrobber(self):
     
            self.movie_screen = QLabel()
            main_layout = QVBoxLayout()
            main_layout.addWidget(self.movie_screen)
            ui.throbberTab2.setLayout(main_layout)
            byteF = QByteArray()
            gif = "D:\Projet\Various\Images\image.gif"
            movie = QMovie(gif, byteF)
            movie.setCacheMode(QMovie.CacheAll)
            movie.setSpeed(100)
            self.movie_screen.setMovie(movie)
            movie.start()
     
            return movie
     
        def stopThrobber(self):
            movie1 = self.startThrobber()
            movie1.stop()
     
        def go(self):
     
            if ui.chkbox.isChecked():
                self.startThrobber()
     
                os.system(r'"C:\Program Files\FME\fme.exe"................) # lancer le script
                self.stopThrobber()
    J'ai essayé avec un Thread (sans réussir) mais on m'a dit qu'il n'y en a pas besoin ici..
    Comment faire ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Par défaut
    Je viens de penser à qqch..
    Si je mets le script (os.system) dans un Thread et je laisse le throbber dans le code principal, c'est peut-être mieux nan ?

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

    Citation Envoyé par guy16 Voir le message
    Je viens de penser à qqch..
    Si je mets le script (os.system) dans un Thread et je laisse le throbber dans le code principal, c'est peut-être mieux nan ?
    Si c'est mieux c'est parce qu'alors, l'exécution du script ne bloque pas les affichages du GUI.
    De toutes façons, pour lancer un script externe, il est préférable de passer par QProcess (dans le monde Qt) ou subprocess.Popen (dans le monde Python) et de préciser qu'on ne veut pas "bloquer" en attendant la fin (ce qui est parfois le défaut mais lire la doc.).
    Cela évite d'avoir à créer un Thread (aysnchrone) qui lance un os.system(synchrone).

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

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Par défaut
    Merci!
    Je teste subprocess pour voir. Le paramètre pour ne pas "bloquer" est Shell qu'il faut mettre en False ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Par défaut
    Re !

    Je n'arrive toujours pas à faire marcher mon code (lancer un throbber, lancer un script FME avec subprocess et arrêter le throbber une fois le script FME terminé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        def go(self):
     
            if ui.chkbox.isChecked():
     
                self.startThrobber()
                script = subprocess.Popen(r'"C:\Program Files\FME\fme.exe" ................', shell=False)
     
                print(script)
     
                self.stopThrobber() # ouvre fenêtre pop up avec message et arrête le throbber
    Je ne comprends pas les paramètres de Popen (stdout, stderr etc), à quoi ils servent , comment les utiliser..
    Je regarde la doc https://docs.python.org/3.4/library/...ubprocess.PIPE mais ça ne m'avance pas (par exepmle, à quoi ça sert de mettre un stdin ?)

    Écris comme ça, le code permet au throbber de tourner pendant qu'il s'occupe du script mais en même temps il exécute stopThrobber ()

    Ce qu'il faudrait c'est qqch qui avertisse lorsque le script est terminé pour pouvoir lancer stopThrobber() (qqch comme stdout ??)

    Si je mets un stdout et que je le print, ça me donne : <_io.BufferedReader name=3>

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

    Citation Envoyé par guy16 Voir le message
    Je ne comprends pas les paramètres de Popen (stdout, stderr etc), à quoi ils servent , comment les utiliser..
    Je regarde la doc https://docs.python.org/3.4/library/...ubprocess.PIPE mais ça ne m'avance pas (par exepmle, à quoi ça sert de mettre un stdin ?)
    Un process est un objet système. Popen vous permet seulement d'en utiliser les différents attributs.

    Citation Envoyé par guy16 Voir le message
    Ce qu'il faudrait c'est qqch qui avertisse lorsque le script est terminé pour pouvoir lancer stopThrobber() (qqch comme stdout ??)
    Ce quelque chose pourrait être un QThread qui attende la fin du process avant de... ou un QProcess qui dispose déjà de l'instrumentation qui permet d'appeler un callback qui.. lorsque le process se termine.

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

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

Discussions similaires

  1. [CVS] Voir un rapport d'activité des développeurs ?
    Par elitost dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/10/2005, 14h13
  2. Indicateur de démarrage du système
    Par gf dans le forum MFC
    Réponses: 7
    Dernier message: 24/09/2005, 02h33
  3. Réponses: 2
    Dernier message: 29/04/2005, 09h32
  4. Activité d'un routeur
    Par knecmotet dans le forum Réseau
    Réponses: 2
    Dernier message: 03/01/2005, 23h58
  5. Mauvais indicateur de connection
    Par calvin dans le forum Hibernate
    Réponses: 15
    Dernier message: 24/05/2004, 12h03

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