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 :

Image dans un QLabel et un QScrollArea


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut Image dans un QLabel et un QScrollArea
    Bonjour,

    Je voudrais afficher une image (dans un QLabel ) qui se trouve dans un QScrollArea.
    En fait dans ma fenêtre j'ai une partie ou j'affiche une image, et je voudrais des scroll car l'image seras plus grand que la zone d'affichage. (mais c'est voulu)

    J'ai utiliser Qt disigner pour faire mon interface, celui ci m'a générer cela pour cette partie :

    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
            self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
            self.scrollArea.setGeometry(QtCore.QRect(323, 0, 421, 541))
            self.scrollArea.setBaseSize(QtCore.QSize(0, 0))
            self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
            self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
            self.scrollArea.setWidgetResizable(True)
            self.scrollArea.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTop|QtCore.Qt.AlignTrailing)
            self.scrollArea.setObjectName("scrollArea")
            self.scrollAreaWidgetContents = QtWidgets.QWidget()
            self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 406, 526))
            self.scrollAreaWidgetContents.setAutoFillBackground(True)
            self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
            self.lab_Image = QtWidgets.QLabel(self.scrollAreaWidgetContents)
            self.lab_Image.setGeometry(QtCore.QRect(10, 30, 381, 461))
            self.lab_Image.setText("")
            self.lab_Image.setScaledContents(False)
            self.lab_Image.setWordWrap(False)
            self.lab_Image.setObjectName("lab_Image")
            self.scrollArea.setWidget(self.scrollAreaWidgetContents)
    Dans mon init, je fait cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            # charge une image
            pixmap = QPixmap("/home/pi/Pictures/Cam1/Image6s_03.jpg")
            self.lab_Image.setPixmap(pixmap)
            self.lab_Image.resize(pixmap.size())
            self.lab_Image.adjustSize()
     
            self.lab_Image.setGeometry(QtCore.QRect(0,0,pixmap.width(),pixmap.height()))
     
            self.scrollArea.setWidgetResizable(True)
     
            self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0,0,pixmap.width(),pixmap.height()))
     
            #self.scrollArea.horizontalScrollBar().value = pixmap.width()#.setvalue(pixmap.width())
    Mais je n'est pas la possibilité d'utiliser le scrolle, il sont grisé ?

    Comment que c'est ti que l'on fait ?

    Merci de votre aide.

    Stéphane

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ton widget où tu places ton label n'est pas dans la QScrollArea.

    Il faut absolument utiliser les layout et non pas la géométrie.

    Quelque chose comme ceci:
    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
     
            self.glayout = QtWidgets.QGridLayout(self.centralwidget)
            self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
            #self.scrollArea.setGeometry(QtCore.QRect(323, 0, 421, 541))
            self.glayout.addWidget(self.scrollArea, 0, 0, 1, 1)
            self.scrollArea.setBaseSize(QtCore.QSize(0, 0))
            self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
            self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
            self.scrollArea.setWidgetResizable(True)
            self.scrollArea.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTop|QtCore.Qt.AlignTrailing)
            self.scrollArea.setObjectName("scrollArea")
            self.scrollAreaWidgetContents = QtWidgets.QWidget()
            self.vlayout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
            self.scrollArea.setWidget(self.scrollAreaWidgetContents)
            self.lab_Image = QtWidgets.QLabel(self.scrollAreaWidgetContents)
            self.lab_Image.setText("")
            self.lab_Image.setScaledContents(False)
            self.lab_Image.setWordWrap(False)
            self.lab_Image.setObjectName("lab_Image")
            self.scrollArea.setWidget(self.scrollAreaWidgetContents)
            self.vlayout.addWidget(self.label)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut
    Salut VinsS,

    Merci pour ta réponse, mais avec ce code, l'image prend toute la fenêtre, pas la place que je voudrais qu'elle soit.

    Aussitôt que j'utilise centralwidget l'image prend toute la fenêtre.

    Faut t'il utiliser des layaout ?

    En gros ce que je veut avoir dans ma fenêtre, sur la gauche des contrôles, infos, ... et sur la droite l'affichage de l'image (même ci elle n'est pas afficher complétement, mais avec des scroll).

    Merci de ton aide.

    Steph

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    La scroll area occupe toute la fenêtre parce que c'est tout ce que tu y as mis.

    Rien ne t'empêche de placer un widget à gauche de la scroll area pour y placer tes widgets de contrôle.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut
    Bonsoir,

    Le code que j'ai mis était juste la partie concernant le scrollArea, j'ai d'autre contrôle sur la gauche.

    J'ai trouvé, avant de charger l'image j'ai ajoute cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # charge une image
    lay = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
    lay.addWidget(self.lab_Image)
    Puis le chargement de l'image

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pixmap = QPixmap("Image.jpg")
    self.lab_Image.setPixmap(pixmap)
    Si cela peut aider qq'un ;-)

    Merci
    Steph

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    ben, c'est exactement ce que j'avais mis dans mon exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            self.vlayout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
            self.scrollArea.setWidget(self.scrollAreaWidgetContents)
            self.lab_Image = QtWidgets.QLabel(self.scrollAreaWidgetContents)
            ...
            self.vlayout.addWidget(self.lab_Image)

Discussions similaires

  1. Faire défiler des images dans un QLabel
    Par dagbass dans le forum Débuter
    Réponses: 2
    Dernier message: 15/02/2013, 08h56
  2. Afficher une image dans un QLabel
    Par kuzuke dans le forum Débuter
    Réponses: 1
    Dernier message: 13/02/2013, 17h27
  3. [QtGui] Afficher une image dans un QLabel sous Windows
    Par LudoSIGMA dans le forum PyQt
    Réponses: 4
    Dernier message: 11/07/2011, 18h03
  4. Redimensionner l'image dans un QLabel prédéfini
    Par morinxav1 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/04/2011, 11h12
  5. Réponses: 4
    Dernier message: 09/05/2010, 19h01

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