2017-06-12 3 views
0

Je développe un logiciel qui obtient des images d'un CAM et les place dans une fenêtre de widget. Étant donné que ma photo est 640x480, je veux redimensionner l'image en fonction de la taille de la fenêtre, afin que l'utilisateur puisse redimensionner la fenêtre pour zoomer ou dézoomer l'image. J'ai fait l'algorithme suivant:PyQt - Redimensionner automatiquement le widget/image

  1. obtenir la taille widget
  2. Calculer la ration en fonction des hauteurs d'image et le widget
  3. Redimensionner l'image
  4. Afficher l'image

Jusqu'à présent, il a bien fonctionné mais il y a un problème. Quand j'ouvre le programme, il commence à croître indéfiniment, je sais que cela arrive parce que le widget s'agrandit et que l'image grossit parce que la fenêtre augmente en premier lieu, c'est une rétroaction positive. Cependant, j'ai déjà essayé de changer la politique de taille à préféré, fixe, etc. et aucun n'a fonctionné.

Ma fenêtre est la structure est la suivante: Widget-> VLayout-> Étiquette (image Pixmap)

Toutes les idées? Merci pour toute aide entrante

+0

Vous pouvez montrer votre code – eyllanesc

Répondre

0

Une solution possible est de créer un widget personnalisé et d'écraser la méthode paintEvent comme indiqué dans le code suivant.

class Label(QWidget): 
    def __init__(self, parent=None): 
     QWidget.__init__(self, parent=parent) 
     self.p = None 

    def setPixmap(self, p): 
     self.p = p 

    def paintEvent(self, event): 
     if self.p: 
      painter = QPainter(self) 
      painter.setRenderHint(QPainter.SmoothPixmapTransform) 
      painter.drawPixmap(self.rect(), self.p) 


class Widget(QWidget): 
    def __init__(self, parent=None): 
     QWidget.__init__(self, parent=parent) 
     lay = QVBoxLayout(self) 
     lb = Label(self) 
     lb.setPixmap(QPixmap("car.jpg")) 
     lay.addWidget(lb) 



app = QApplication(sys.argv) 
w = Widget() 
w.show() 
sys.exit(app.exec_()) 

enter image description here

enter image description here

+0

Il a bien compte tenu du problème de modification de taille, mais je pense que je ne suis pas clair dans ma question .. J'utilise en fait la CAM pour obtenir plusieurs images, comme une vidéo. Ainsi, l'étiquette ne se rafraîchit que lorsqu'elle est redimensionnée, alors que je veux la rafraîchir à chaque nouvelle image. Est-ce qu'il y a un moyen de résoudre ceci? – Eduardo

+0

PS: J'ai ajouté 'update()' à la méthode setPixmap, ça s'est bien passé! Merci beaucoup!!! – Eduardo