Bonjour,
Après avoir parcouru tout le forum Qt et PyQt sans trouver ma réponse, je me décide à poster mon message.
Voilà je cherche à afficher des labels (images) en l'occurence des affiches de films dans un widget scrollé. ceux-ci seront mis à jour via le signal "QtCore.SIGNAL('valueChanged(int)')" d'un slider (ce slider est un autre widget de ma QMainWindow). Pour faire ça, j'ai conçu une classe héritant d'un QWidget, dont voici le code :
Je pensais avoir compris l'imbrication compliquée mais nécessaire des différents widgets et layout afin d'utiliser un scroll :
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 from PyQt4 import QtGui, QtCore from model.Film import Film class PictureViewer(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) #list of films self.films=[] self.widgetsConfiguration() '''Signals connections''' self.connect(self, QtCore.SIGNAL("updateElements()"), self.updateLabel) def widgetsConfiguration(self): self.scroll=QtGui.QScrollArea() self.wid=QtGui.QWidget() self.layout=QtGui.QHBoxLayout(self.wid) self.wid.setLayout(self.layout) self.layoutMain=QtGui.QHBoxLayout(self) self.scroll.setWidget(self.wid) self.layoutMain.addWidget(self.scroll) self.setLayout(self.layoutMain) def deleteElements(self): for item in self.wid.findChildren(Film, "film"): item.hide() item.deleteLater() def updateLabel(self): self.deleteElements() self.addFilm() def addFilm(self): for film in self.films: self.layout.insertWidget(0, film) #film.show() self.layout.update() self.wid.update() self.layoutMain.update() self.update() def setFilms(self, films): self.films=films
(Labels=>Layout=>QWidget=>QScrollArea=>LayoutMain=>widget parent) mais peut-être pas finalement...
Car lorsque le signal "QtCore.SIGNAL("updateElements()")" est levé, aucun label n'apparait. Ils sont cependant présents car ils sont bien enfants du layout (utilisation de la fonction findChildren et de print) et ils sont également bien supprimés avec la fonction deleteElements(). J'ai eu beau faire des update() et même des show() de mes widgets mais rien à faire.
Je pense que le problème vient de l'imbrication de mes différents widgets et layout mais là je sèche.
Si quelqu'un pouvait avait une solution, ou a déjà rencontré ce problème je suis preneur pour tout renseignement.
Merci
Partager