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 :

Performances QTableView / QAbstractTableModel


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 160
    Par défaut Performances QTableView / QAbstractTableModel
    Bonjour,

    j'ai une application comprenant QTableView / QAbstractTableModel que j'ai largement tirée de cet exemple

    Mon problème est que mes données à afficher forment un tableau de 2000*10000 cellules (contenant un caractère chacune), voir plus...

    Le chargement des données prends environ 30 secondes mais ça s'affiche bien et le défilement est correct tant que la fenêtre reste petite (10x30 cellules). Dès que je fais du plein écran, le défilement est très saccadé...

    Est-ce la bonne approche pour des données pour des tables avec autant de cellules ou que puis je faire pour améliorer les performances?

    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,

    Tout dépend du type de traitement qu'on veut faire avec cette présentation visuelle: recherche? modifications? tri? etc.

    Selon le cas, une fenêtre d'un simple QTextEdit avec une liste de chaines (puisqu'il n'y a qu'un caractère par case) serait peut-être plus rapide. On pourrait afficher à tout moment l'adresse x,y du curseur, et désactiver l'insertion pour ne laisser que le remplacement.

    En tout cas, il ne faudra pas s'attendre au miracle pour afficher et gérer de façon interactive 20 millions de caractères (environ 5000 pages dactylographiées)...

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 160
    Par défaut
    Idéalement, je voudrais pouvoir entre autre:
    • trier alphabétiquement les lignes selon le titre,
    • modifier une ligne,
    • insérer un caractère identique sur plusieurs lignes lors d'une sélection rectangulaire,
    • modifier la couleur d'arrière plan de chaque "cellule" en fonction du caractère affiché,
    • sélectionner / supprimer des lignes ou des colonnes

    Le couple QTableView / QAbstractTableModel me semblait approprié pour faire cela (grace au roles, ...) mais je conçois que pour un nombre de cellules élevé, cela n'est pas évident.
    Je pense qu'en se débrouillant bien, on peut faire tout cela avec un QTextEdit. Je pense que je vais essayer pour voir ce que je peux gagner au niveau des performances.
    Par contre je n'arrive pas à voir (au point de vue code) si ce qui est décrit pour des 'large dataset' ici peut me permettre sous pyqt d'améliorer les performances dans mon cas

  4. #4
    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
    Merci pour le lien: l'idée est effectivement géniale! Elle consiste à dire (en gros) que les données qu'il est utile de manipuler sont seulement celle que l'utilisateur voit à l'écran. C'est ce que j'utilise couramment pour visualiser les tables des bases de données SQL, et ça marche très bien (y compris pour le tri ou le filtrage).

    Mais pour passer de l'idée au code, il faudra pas mal d'efforts, y compris pour traduire le C++ en Python... S'il n'y a pas d'autre solution, ça vaut le coup d'essayer!

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 160
    Par défaut
    J'ai regardé un peu le code du lien que j'ai posté précédemment et il ne me semble pas très différent de la logique QTableView / QAbstractTableModel.

    D'autre part, après quelques essais, j'ai noté ceci:
    mon fichier de 2000 lignes de 10 000 caractères ne fait que 2,8Mo ; c'est un petit fichier dirons nous. Il est parsé et chargé en mémoire en moins d'une seconde. Le reste des 30 secondes de chargement incombent à la mise en place et à l'affichage des données dans la QtableView. De plus, tant que la taille de ma fenêtre ne fait afficher que quelques centaines de cellules, le défilement est correct. Quand je fais du plein écran et que le nombre de cellules affichées est de l'ordre de plusieurs milliers, tout est ralenti!

    En conclusion, le problème n'est pas en soit ma quantité de données (2000*10000 caractères) mais la gestion de l'affichage d'un nombre important de cellules.

    Je peux supposer que la QTableView et surtout les objets (Qvariant) représentant les cellules sont trop "lourds" pour ce nombre de cellules. Peut être qu'une classe QTableView avec des objets plus simples amélioreraient les choses.

    A défaut , je testerai le QTextEdit ou des Labels arrangés en grille (si un layout de plusieurs milliers de Label est gérable...)

Discussions similaires

  1. [maintenance][performance] Que faire comme maintenance ?
    Par woodwai dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 06/11/2003, 15h39
  2. Performance xml
    Par MicKCanE dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/07/2003, 06h41
  3. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18
  4. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37
  5. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 11h41

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