Bonjour à tous,
Je galère un peu, parce que je cherche à afficher une image dans un qtablewidget en modifiant la couleur des cellules une par une. Je sais que les qtablewidget ne sont pas très vivaces, mais là je pense qu'on peut faire quelque chose au niveau de mon code. Voici l'existant:
1 2 3 4 5 6 7 8
| #RGB data creation using map function
RGBAs = list(map(lambda x: cmap(norm(x)), data[:, :]))
#Modify cell color
for i in range(l):
for j in range(h): #cell management, one by one...
self.tab.setItem(i,j,QTableWidgetItem())
self.tab.item(i,j).setBackground(QBrush(QColor(RGBAs[i][j][0] * 255, RGBAs[i][j][1] * 255, RGBAs[i][j][2] * 255, RGBAs[i][j][3] * 255))) |
Là dessus j'ai des questions:
1) est-ce qu'on peut éviter de faire un setItem pour chaque item et directement faire un setItem pour tous les item, ça ferait gagner du temps.
2) au lieu d'utiliser une double boucle i/j pour agir sur chaque cellule je pensais utiliser une fonction lambda du type:
map(lambda R,G,B,A: self.tab.item(i,j).setBackground(R,G,B,A), RGBAs[i][j][0] * 255, RGBAs[i][j][1] * 255, RGBAs[i][j][2] * 255, RGBAs[i][j][3] * 255)
mais j'ai le problème du "item(i,j)" que je ne connais pas. Existe-t-il un autre moyen plus matriciel d'écrire ces données ?
3) ça je n'ai jamais fait, mais pour rigoler, est-ce qu'il serait possible de faire en muli thread pour gagner encore plus de temps ? Je serai curieux de voir la différence de performance par rapport à la double boucle for.
merci pour votre aide!
Lelorrain
Partager