Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails)

#1 Le 01/03/2013, à 10:09

__phoenix__

[Python/Gtk] Ajouter des données à un ListStore est excessivement long

Bonjour à tous,

J'ai décidé récemment de me mettre à Python, en utilisant Gtk pour l'UI. J'utilise les versions 3 de Python et Gtk, PyGObject (gi), et je passe par Glade pour faire l'essentiel de l'interface de mon programme.

Mais j'ai un soucis concernant les ListStore et Treeview : y ajouter des données est particulièrement long.

J'utilise une boucle for comme ceci pour remplir mon ListStore :

# je récupère mon ListStore fait dans Glade
storeCollection = builder.get_object("liststoreCollection")

# j'ajoute mes données
for j, elm in enumerate(listecontenucollectionInfo):
                        storeCollection.append([elm[0], elm[1], elm[2], EditionCourteVersLongue(elm[3]), elm[4], elm[5]])

Mais le code ci-dessus prend beaucoup de temps à s'exécuter : il lui faut plus de 13 secondes pour ajouter les 2529 lignes stockées dans ma variable listecontenucollectionInfo.

J'ai fait quelques recherches, et je suis tombé sur ceci, qui (même si c'est vieux) propose plusieurs solutions : détacher mon Store du Treeview et désactiver le tri.

J'ai essayé de mettre en pratique ces solutions, comme ceci :

storeCollection = builder.get_object("liststoreCollection")
treeviewCollection = builder.get_object("treeviewCollection")

# on désactive le tri 
storeCollection.set_default_sort_func(lambda *args: -1)
storeCollection.set_sort_column_id(-1, Gtk.SortType.ASCENDING)

# on détache le Store du Treeview
treeviewCollection.freeze_child_notify()
treeviewCollection.set_model(None)

for j, elm in enumerate(listecontenucollectionInfo):
         storeCollection.append([elm[0], elm[1], elm[2], EditionCourteVersLongue(elm[3]), elm[4], elm[5]])

treeviewCollection.set_model(storeCollection)
treeviewCollection.thaw_child_notify()

Mais ça ne change strictement rien... toujours 13 secondes ! Peut-être que le problème est ailleurs et que je m'y prend mal (débutant oblige !) ?

Auriez-vous une piste / suggestion pour corriger ce problème de lenteur ?


Merci d'avance !

Dernière modification par __phoenix__ (Le 01/03/2013, à 10:15)

Hors ligne

#2 Le 08/03/2013, à 20:25

__phoenix__

Re : [Python/Gtk] Ajouter des données à un ListStore est excessivement long

Personne ? sad

Hors ligne

Haut de page ↑