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 :

Superposer une image et un texte


Sujet :

PyQt Python

  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut Superposer une image et un texte
    Bonjour

    Je viens chercher de l'aide car je cherche à superposer * une couleur de fond * une image transparente * un texte dans un même widget

    Pour l'instant, je me suis pas trop mal débrouillé, j'arrive à afficher une image et un texte sur un même fond, par contre je bloque sur deux points
    * comment faire pour mettre le texte au dessus de l'image
    * comment faire pour que la taille du texte et de l'image s'adapte à la taille de la fenêtre

    Voici mon bout de 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
     
    import sys
    from PyQt5.QtWidgets import QLabel, QApplication, QWidget, QVBoxLayout
    from PyQt5.QtGui import QPixmap
    from PyQt5.QtCore import Qt, QSize, QRect
     
    def window():
       app = QApplication(sys.argv)
       win = QWidget() 
     
       # ~ win.setStyleSheet("background-color:pink; background-image:url(image.svg); background-repeat:no-repeat; background-position:center center;");
       win.setStyleSheet("background-color:green;");
     
       label = QLabel()
       label_image = QLabel()
     
       label.setText("<h1>Hello World</h1>")
       label.setAlignment(Qt.AlignCenter)
       label.setWordWrap(True)
     
       label_image.setPixmap(QPixmap("image.svg").scaled(QSize(100,100),  Qt.KeepAspectRatio))
       label_image.setAlignment(Qt.AlignCenter)
     
       vbox = QVBoxLayout()
       vbox.addWidget(label)
       vbox.addWidget(label_image)
     
       win.setLayout(vbox)
     
       win.setWindowTitle("QLabel Demo")
       win.show()
       sys.exit(app.exec_())
     
    if __name__ == '__main__':
       window()
    merci pour votre aide

  2. #2
    Expert confirmé

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

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

    Pour l'image de fond qui se redimensionne automatiquement c'est "border-image" qu'il faut utiliser.

    Ceci est plus proche de ce que tu veux:
    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
     
    def window():
       app = QApplication(sys.argv)
       win = QWidget()
       win.setMinimumSize(300, 300)
       img = "/chemin/lena.jpg"
       win.setStyleSheet("border-image:url(%s); "
                         "border-repeat:no-repeat; "
                         "border-position: center; " % img);
       vbox = QVBoxLayout()
       label = QLabel(win)
       label.setText("<h1>Hello World</h1>")
       label.setAlignment(Qt.AlignCenter)
       label.setWordWrap(True)
       vbox.addWidget(label)
       win.setLayout(vbox)
       win.setWindowTitle("QLabel Demo")
       win.show()
       sys.exit(app.exec_())
    Les styleSheet sont décrites ici:
    https://doc.qt.io/qt-5/stylesheet-reference.html

  3. #3
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    merci VinsS, cela résoud une grande partie du problème
    mon seul point bloquant maintenant est de ne pas déformer l'image

    est ce qu'il existe une sorte de KeepAspectRatio avec les styleSheet ? je n'arrive pas à trouver

Discussions similaires

  1. superposer une image et du texte
    Par boutmos dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 20/11/2008, 16h04
  2. inserer une image et du texte dans une Jlist
    Par cellestion dans le forum Composants
    Réponses: 4
    Dernier message: 03/03/2006, 23h47
  3. Centrer une image et un texte dans un div
    Par flexx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 17/01/2006, 20h11

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