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 :

Rafraîchissement de labels dans un widget scrollé


Sujet :

PyQt Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Rafraîchissement de labels dans un widget scrollé
    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 :

    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
    Je pensais avoir compris l'imbrication compliquée mais nécessaire des différents widgets et layout afin d'utiliser un scroll :
    (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

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    C'est bon j'ai finalement trouver d'où venait le problème. Pour ceux qui le rencontreraient, il faut préciser l'option de redimensionnement des widgets de la scrollArea à True:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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)
    
            self.scroll.setWidgetResizable(True)
    A bientôt!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Justification dun widget label dans une vbox.
    Par Invité dans le forum GTK+
    Réponses: 2
    Dernier message: 08/10/2013, 19h35
  2. label dans une BDD xml
    Par oliver2202 dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 05/04/2006, 10h58
  3. [Tkinter] ecrire un texte dans un widget entry
    Par thierry_b dans le forum Tkinter
    Réponses: 3
    Dernier message: 15/12/2005, 11h38
  4. Probleme ajout label dans une fenetre
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 11
    Dernier message: 05/11/2005, 17h51
  5. Label dans /etc/fstab
    Par domileg dans le forum Administration système
    Réponses: 5
    Dernier message: 02/12/2004, 16h05

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