Bonjour a tous (et desole pour les accents, clavier japonais ^^)

Je m'etais fait un petit programme il y a quelques temps, afin de trier un grand nombre de photos que j'avais sur mon disque.

Lors des tests, j'avais utilise un echantillon de quelques milliers de cliches, sans aucun probleme.

Le code correspondant a l'affichage etait a peu pres comme ca
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
 
i = 0
for uid, files in self.files.items():
    item = QtGui.QTableWidgetItem("%9d" % (uid))
    self.ui.tableWidget.setItem(i, 0, item)
    self.ui.tableWidget.scrollToItem(item)
    for j, f in enumerate(files):
        label = QtGui.QLabel()
        pixmap = QtGui.QPixmap()
        pixmap.load(f)
        label.setPixmap(pixmap.scaled(self.size_photo, self.size_photo,
                                    QtCore.Qt.KeepAspectRatio,
                                    QtCore.Qt.SmoothTransformation))
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.ui.tableWidget.setCellWidget(i, j + 1, label)
    i += 1
    QtCore.QCoreApplication.processEvents()
    if i == limit or self.stopped:
        break
Le probleme de cette approche est que mon UI restera bloquee tant que toutes les photos ne seront pas chargees.
Avec quelques milliers de photos, j'ai un delai de l'ordre de la seconde, mais quand je passe a l'echelle l'interface freeze plus longtemps.
Lorsque j'avais joue avec QML, j'avais vu qu'on pouvait charger des images de facon asynchrone, et c'est a peu pres ce resultat que j'aimerais avoir.

Je suppose que cela implique de passer par un autre thread qui creera les pixmaps et enverra un signal au thread GUI afin de mettre a jour le tableau ?

Quelqu'un aurait-il des conseils quant a la methode ?
Par exemple, je pensais utiliser une liste de Pixmaps, qui serait partagee entre le thread GUI et le thread de travail, mais est-ce que c'est vraiment une approche propre ?
Je suis un peu novice en programmation parallele ^^;