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 :

Visionnage d'une image


Sujet :

PyQt Python

  1. #1
    Invité
    Invité(e)
    Par défaut Visionnage d'une image
    Bonjour.

    Sur un bouton où est écrit "voir", je dois ouvrir une nouvelle fenêtre qui doit m'afficher une image (pour ça, je dois me servir de la classe QPixmap).
    Je pense que ma réponse ce trouve dans ce code, mais je n'arrive pas à le retranscrire comme il faut en python:
    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
    #include <QApplication>
    #include <QtGui>
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QWidget fenetre;
            QPushButton *bouton = new QPushButton("Ouvrir la fenêtre", &fenetre);
     
     
        QDialog secondeFenetre (&fenetre);
            QVBoxLayout *layout = new QVBoxLayout;
            QLabel *image = new QLabel(&secondeFenetre);
            image->setPixmap(QPixmap("icone.png"));
            layout->addWidget(image);
            secondeFenetre.setLayout(layout);
     
     
        QWidget::connect(bouton, SIGNAL(clicked()), &secondeFenetre, SLOT(exec()));
        fenetre.show();
     
        return app.exec();
    }
    J'ai créer ma fonction viewPic qui doit faire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def viewPic(self) :
        from PyQt4.QtGui import QWidget,QVBoxLayout,QLabel,QPixmap
        mafenetre=QWidget
        adresseImage = self.cheminLabel.text()
        print "chemin label = ",adresseImage
     
        layout=QVBoxLayout
        image=QLabel()
        image.setPixmap(QPixmap(str(adresseImage)))
        layout.addWidget(image)
        mafenetre.setLayout(layout)
        mafenetre.show()
    Lors de l'exécution du programme, l'adresse de mon image est correcte, mais j'obtiens cette erreur:
    layout.addWidget(image)
    TypeError: first argument of unbound method QBoxLayout.addWidget() must be a QBoxLayout instance
    Que dois-je faire pour y remédier?
    Merci

  2. #2
    Membre expérimenté Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Par défaut
    Hello,
    En faisant
    tu affecte un objet de type "class" (QVBoxLayout) à layout. layout devient donc une classe (et tu peux parfaitement t'en servir à la place de QVBoxLayout, dans la limite de sa portée). Pour creer un objet de type QVBoxLayout, tu dois appeler explicitement le constructeur (je crois, plus fait de python depuis longtemps). Ça donne:
    EDIT: ou alors non? sais plus...

    EDIT 2: ca marche d'ajouter une QPixmap dans un layout? Faut pas plutôt passer par un QLabel?

  3. #3
    Invité
    Invité(e)
    Par défaut
    j'ai réglé cela, j'ai cependant une erreur que je n'arrive pas à comprendre, dans la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    layout.addWidget(image)
    j'ai cela:

    TypeError: first argument of unbound method QBoxLayout.addWidget() must be a QBoxLayout instance
    tu fais comment pour ajouter QPixmap dans un layout en passant par QLabel?

  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
    Salut, je t'extrais ceci d'un code plus long :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
            self.horizontalLayout_3 = QtGui.QHBoxLayout()
    ...
            self.image_label = QtGui.QLabel(Dialog)
            self.image_label.setObjectName("image_label")
            self.horizontalLayout_3.addWidget(self.image_label)
    ...
    ce qui précède est donc dans la définition de l'interface, ce qui explique mon layout 3, il n'est pas utile d'associer une chaine de texte au label, declare-le simplement et ajoute-le à ton layout.

    ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        def view(self):
            file = self.dir + self.name
            img = QtGui.QPixmap(file)
     
            if img.size().width > 200 or img.size().height > 200:
                img = img.scaled(QtCore.QSize(300, 300),  
                                QtCore.Qt.KeepAspectRatio, 
                                QtCore.Qt.FastTransformation)
     
            self.image_label.setPixmap(img)
    Ici j'avais besoin de limiter la taille de l'image à 300 x 300 maximum, je t'ai laissé le code qui pourra toujours servir.
    En fait le plus important c'est la dernière ligne.

    Bon amusement.
    Vincent

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut!

    Ton code a l'air intéressant, mais il y a des bugs mais je n'arrive pas à faire la dernière commande.
    Déjà, dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     file = self.dir + self.name
    file est un mot clé dans python, je l'ai donc renommée en filename, l'adresse complète de l'image se récupère en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     self.cheminLabel.text()
    La partie où l'on redimensionne l'image ne m'intéresse pas.
    Quand tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.image_label.setPixmap(img)
    d'où sort ce self.image_label?

    Je met le code que j'ai au final concernant cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      def viewPic(self) :
        filename=self.cheminLabel.text()
        img = QtGui.QPixmap(filename)
        img.setPixmap(img) #ne marche pas

  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
    Ce code était extrait d'un fichier beaucoup plus long, ce qui explique ce self.image_label.

    Perso, je vois un problème dans tes lignes, tu ne déclare pas la fenêtre comme parent à ton layout.

    Je te fais une version courte qui fonctionne :

    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
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
     
    from PyQt4 import QtCore, QtGui
     
    class MainGui(object):
        def setupUi(self, MainWindow):
            MainWindow.resize(218, 379)
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.layout = QtGui.QVBoxLayout(self.centralwidget)
            self.layout.setObjectName("layout")
            self.label = QtGui.QLabel(self.centralwidget)
            self.label.setPixmap(QtGui.QPixmap("/home/vincent/Images/3245385.jpg"))
            self.layout.addWidget(self.label)
            MainWindow.setCentralWidget(self.centralwidget)
     
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = MainGui()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    Est-ce une boite de dialogue dont tu as besoin ?

    au plaisir.
    Vincent

Discussions similaires

  1. Resize d'une image
    Par Anonymous dans le forum C
    Réponses: 6
    Dernier message: 13/07/2008, 22h23
  2. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  3. Réponses: 3
    Dernier message: 12/06/2002, 19h03
  4. lire une image au format RAW
    Par Anonymous dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/05/2002, 00h11
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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