Partage
  • Partager sur Facebook
  • Partager sur Twitter

[PyQt] Taille du centralWidget?

Sujet résolu
    27 août 2010 à 1:40:37

    Bonjour à tous!

    Je tente actuellement de creer un petit logiciel de visualisation de photos en pythons à l'aide de la bibliothèque PyQt.
    Malheureusement je bute sur un problème assez difficile à résoudre: je souhaiterais que la photo prenne toute la place disponible à l'intérieur de la fenêtre, même quand celle ci est redimensionnée, mais que la photo garde malgré tout son ratio original.

    Pour le moment, j'ai reussi à faire en sorte que le QPixmap affichant l'image prenne toute la place disponible via la methode setScaledContents du QLabel la contenant. Le probleme est que l'image ne garde pas son ratio original :(

    J'avais pensé à une autre piste, qui consiste à récupérer la taille du widget central, mais celle ci semble ne pas changer, quelque soit la taille de la fenetre! o_O


    Voici la methode d'une QMainWindow qui devrait me permettre d'afficher l'image:



    def display_img(self, img):
            """Affiche l'image actuellement visionnee"""
            #Widget qui sera utilise en centralWidget
            display = QtGui.QWidget()
    
            label = QtGui.QLabel(self)
    
            img.pixmap = img.pixmap.scaled(display.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.FastTransformation)
            label.setPixmap(img.pixmap) 
            label.setScaledContents(True)
    
            hbox = QtGui.QHBoxLayout()
            hbox.addWidget(label)
    
            display.setLayout(hbox)
    
            self.setCentralWidget(display)
    



    Si quelqu'un avait une idee pour m'aider a gerer ce cas, je lui en serait très reconnaissant
    Merci
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      27 août 2010 à 10:52:40

      Je ne connais pas bien ces méthodes dans pyqt

      Qpixmap n'est pas là pour traiter une image mais simplement pour l'afficher.

      Si tu veux traiter une image il faut utiliser la classe QImage.

      La classe QPainter qui te permet de dessiner peut être utile aussi, qualité du rendu, etc...

      Pour QPainter dans la doc il est dit :

      Citation

      Simple transformations, meaning translation and scaling, pluss 0, 90, 180, 270 degree rotations.



      En fait si tu avais une très bonne qualité au départ, tu aurais peut-être pu utiliser l'option Qt.IgnoreAspectRatio (tu peux toujours essayer).

      • Partager sur Facebook
      • Partager sur Twitter
        27 août 2010 à 19:17:57

        Apparement les méthodes de PyQt sont exactement les même que celles de Qt pour C++

        Pour le moment je souhaite juste afficher l'image, sans autre transformation qu'une mise à l'échelle, donc QPixmap me semble bien adapté.

        Ensuite, je souhaite garde le ratio de l'image, donc je pense que je suis obligé d'utiliser keepAspectRatio

        Le vrai soucis c'est que je ne connais pas la taille du centralWidget, puisque lorsque j'affiche les valeurs de display.size() (le widget mis en centralWidget) ou de label.size(), ces valeurs sont constantes...

        En tout cas merci d'avoir répondu fred
        • Partager sur Facebook
        • Partager sur Twitter
          28 août 2010 à 20:47:31

          Bonne nouvelle, j'ai reussi à faire ce que je voulais!

          La taille du QLabel peut en fait etre récupérée via label.window().width() et label.window().height() et non label.size()

          Donc avant de créer l'image, je récupère ces valeurs et je redimensionne ensuite l'image à la taille de la fenetre, en specifiant l'argument QtCore.Qt.KeepAspectRatio

          C'est exactement ce que je voulais, sujet résolu!
          • Partager sur Facebook
          • Partager sur Twitter

          [PyQt] Taille du centralWidget?

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown