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 :

ProgressBar qui affiche le pourcentage de conversion d'un fichier


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Homme Profil pro
    Data Lover
    Inscrit en
    Décembre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Lover
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 96
    Points : 101
    Points
    101
    Par défaut ProgressBar qui affiche le pourcentage de conversion d'un fichier
    Salut,

    J'ai crée une progressBar avec PySide2 qui doit m'afficher l'avancement de la conversion d'un dataframe en csv, pour cela, j'ai utilisé un QThread.
    Sauf que quand je lance mon programme, il se plante pendant un moment avant que la progressBar n'affiche cet avancement.
    De ce fait, j'aimerais savoir comment accéder à l'état de conversion d'un fichier pour pouvoir l'afficher dans cette progressBar.
    Ci-dessous, une partie du code que j'ai utilisé.

    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
    class Convertisseur(QtWidgets.QWidget, Ui_Convertisseur):
        def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setupConnetions()
        self.progressBar.setMinimum(0)
        self.progressBar.setMaximum(100)
        self.progressBar.setValue(0)
     
       self.pushButton.clicked.connect(self.onButtonClick) # Bouton permettant le lancement de la conversion 
     
       def onButtonClick(self):
           self.th = MyThread()
           self.th.countChanged.connect(self.onCountChanged)
           self.th.start()
     
       def onCountChanged(self, value):
           self.progressBar.setValue(value)	 
     
    class MyThread(QtCore.QThread):
        countChanged = QtCore.Signal(int)
     
        def run(self):
            df.to_csv(text.csv) # Conversion du dataframe df en csv	
            count = 0
            while count < 100:
                count +=1
                time.sleep(0.5)
                self.countChanged.emit(count)

  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,

    Qu'est-ce que c'est ça: df.to_csv(text.csv) ?

    Si tu me dis que tu lances là la conversion alors qu'est-ce que ça fout en dehors du thread ?

  3. #3
    Membre régulier
    Homme Profil pro
    Data Lover
    Inscrit en
    Décembre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Lover
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 96
    Points : 101
    Points
    101
    Par défaut
    Qu'est-ce que c'est ça: df.to_csv(text.csv) ?
    Oupss, c'est une erreur d'emplacement. Cela permet de convertir mon dataframe en csv.

    J'ai mis à jour mon code en replacement cette instruction dans la methode Run. Cependant, le problème y est toujours

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour que la conversion puisse mettre à jour une barre de progression, il faudrait que la fonction de conversion renvoie avec un "callback" son avancement et qu'on ait dès le début le nombre total d'opérations à réaliser. Par exemple, le nombre de lignes traités et le nombre total de lignes à traiter.

    A défaut, on peut faire fonctionner la barre de progression comme une "chenille", qui dit simplement à l'utilisateur que le traitement est en cours pour le faire patienter.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre régulier
    Homme Profil pro
    Data Lover
    Inscrit en
    Décembre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Lover
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 96
    Points : 101
    Points
    101
    Par défaut
    Bonjour,
    Comme dans mon cas, c'est un dataframe que je veux convertir et que je ne peux normalement pas à priori connaître le nombre d'opérations à réaliser c'est donc impossible de le faire.
    il faudrait que la fonction de conversion renvoie avec un "callback" son avancement et qu'on ait dès le début le nombre total d'opérations à réaliser
    Du coup, par curiosité, comment les barres de progression fonctionnent-elles avec le téléchargement en ligne d'un fichier par exemple ? Est-ce que dans ces cas c'est juste aussi des barres de progression fantaisistes pour faire patienter l'utilisateur ?

  6. #6
    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
    Dans ton cas le signal ne sera émis qu'a la fin de la conversion.

    Pour le téléchargement de fichier, c'est différent, on connaît la taille du fichier et on télécharge par bloc de taille déterminée. On peut donc émettre un signal tous les x blocs.

  7. #7
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Citation Envoyé par master4 Voir le message
    Du coup, par curiosité, comment les barres de progression fonctionnent-elles avec le téléchargement en ligne d'un fichier par exemple ? Est-ce que dans ces cas c'est juste aussi des barres de progression fantaisistes pour faire patienter l'utilisateur ?
    Pour ça il existe un header content-length, s'il n'est pas présent alors le navigateur à une barre de progression qui "tourne dans le vide", par exemple quand on télécharge une branche sous le format ZIP sur github ce phénomène apparaît.

    Avec Qt https://doc.qt.io/qt-5/qprogressbar.html#details
    If minimum and maximum both are set to 0, the bar shows a busy indicator instead of a percentage of steps. This is useful, for example, when using QNetworkAccessManager to download items when they are unable to determine the size of the item being downloaded.

  8. #8
    Membre régulier
    Homme Profil pro
    Data Lover
    Inscrit en
    Décembre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Lover
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 96
    Points : 101
    Points
    101
    Par défaut
    Donc en gros, ça veut dire que ce que je veux faire est impossible ?

  9. #9
    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
    Tu ne peux pas décomposer ta conversion de dataframe en blocs de X octets ou X lignes ou X machins ?

    Si non, je pense que la réponse est non.

  10. #10
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Il y a un paramètre chunksize, c'est donc possible (assez facilement même)
    Ne connaissant pas pandas je n'ai aucune idée de ce que ça retourne, ni même de si les dataframes ont une sorte d' itérateur interne ou si vous devez accéder à un certain index pour ne pas écrire les n premières ligne fois n/taille totale (n étant chunksize)

    En regardant vite fait quelques forums il semble que diverses solutions existent, tqdm et Dask ressortent le plus

  11. #11
    Membre régulier
    Homme Profil pro
    Data Lover
    Inscrit en
    Décembre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Lover
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 96
    Points : 101
    Points
    101
    Par défaut
    Merci à tous d'avoir pris le temps de me répondre.

    @flapili, je vais voir si la solution que tu m'as proposée va marcher dans mon cas. Sinon, je vais juste mettre du texte pour signifier que la conversion est en cours.

  12. #12
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    S'il n'était pas possible d'avoir un paramètre de progression de la conversion, il y a une autre solution à la "chenille": le throbber! Il s'agit de la petite roue qui tourne qu'on voit souvent.

    Comme je l'utilise souvent dans mes programmes, j'ai fait un petit tuto:
    http://python.jpvweb.com/python/mesr...pyqt5_throbber
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  13. #13
    Membre régulier
    Homme Profil pro
    Data Lover
    Inscrit en
    Décembre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Lover
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 96
    Points : 101
    Points
    101
    Par défaut
    @tyrtamos

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

Discussions similaires

  1. Correction d'une requête qui affiche un pourcentage
    Par doudou2015 dans le forum Langage SQL
    Réponses: 23
    Dernier message: 05/06/2015, 02h00
  2. Progressbar qui ne s'affiche qu'une fois à 100%
    Par droliprane dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/07/2014, 19h04
  3. Popup de ProgressBar qui ne s'affiche pas sous Vista
    Par wwave dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 28/02/2012, 16h09
  4. Réponses: 4
    Dernier message: 17/10/2005, 15h05
  5. Réponses: 4
    Dernier message: 03/11/2004, 12h09

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