Bonjour à tous,
Je viens de terminer (enfin du moins une V1.0 on va dire, rien n'est jamais vraiment terminé) une application sous Python utilisant:
- Python 3.X
- PyQt5 (GUI)
- QDesigner (mise en forme de la GUI)
- Matplolib (graphiques)
Son but : Faire ses comptes simplement et donner à l'utilisateur plusieurs outils d'analyse, notamment grâce à des graphiques (pas moins de 13 différents).
L'application fonctionne bien, malgré quelques temps longs lorsqu'il faut mettre à jour les 13 graphiques "en même temps". En effet, lorsque j'ajoute une transaction à mon compte, je peux décider de mettre à jour tous les graphiques et cela prend du temps.
Ma question est la suivante: Quelle est la façon la plus optimal de gérer les données, les graphiques, l'interface etc ?
Aujourd'hui l'application se présente ainsi:
- Une QMainWindow (home) qui liste les comptes déjà créé et qui permet d'en charger un ou bien d'en créer un nouveau. Elle ne contient pas d'information ou de grosses structures
- Un QDialog par compte ouvert. Ce QDialog contient toutes les informations, toutes les structures et toutes les fonctions nécessaires associé à un compte.
Je me demande donc si ma façon d'opérer est la bonne et si c'est la plus optimisée ?
Je trouve que le QDialog contient peut-être trop d'informations, trop de données, trop de fonctions et que cela ralenti l'exécution de l'application. Actuellement je n'utilise aucun QThread par exemple, tout se fait dans la Main Loop, ce qui, je sais, n'est pas forcément très bien. Or, j'ai 13 graphiques et chaque appel de la fonction 'draw()' doit se faire au sein de la Main Loop si j'ai bien compris et c'est là que je perds beaucoup de temps. Le traitement des données en lui-même se fait rapidement car les structures ne sont pas très lourdes (dictionnaires, liste, table, etc.).
Pour exemple, j'ai un dictionnaire contenant 12 ou 16 sous-dictionnaire contenant chacun 13 et 20 valeurs. C'est la plus grosse structure de donnée que je pourrais avoir.
Je me demande donc si je ne devrais pas séparer ainsi mes objets:
- Une QMainWindow (home). Même fonctions que précédemment.
- Un QDialog par compte ouvert. Ce dernier servirait uniquement d'interface avec l'utilisateur. Il tracerait les graphiques et afficherait les informations qu'on lui envoie.
- Un objet de stockage de données par compte ouvert. Dans cet objet j'y stockerais les données et j'y effectuerais les calculs lorsque j'ajoute une transaction ou que j'en supprime une. Il renverrais les informations vers le QDialog
- Un couple thread/worker par grosse fonction. Ces fonctions là récupèrent les données dans les dictionnaires et autres listes (de l'objet de stockage), font les calculs (sans ajouter, ni supprimer de données) et renvoient des listes et des données à afficher (grâce matplotlib dans le QDialog).
L'objet de stockage sera créer à l'intérieur du QDialog pour pouvoir communiquer facilement les données. De même pour les couples thread/worker. Finalement le QDialog contiendra toujours beaucoup d'information, mais ces dernières seront peut-être mieux segmentées.
Qu'en pensez-vous ?
Merci d'avoir pris le temps de me lire et peut-être de me répondre![]()
Partager