2017-06-12 9 views
0

私は、CAMから写真を取得してウィジェットウィンドウに入れるソフトウェアを開発しています。私の画像は640x480なので、ウィンドウサイズに合わせて画像のサイズを変更したいので、ウィンドウのサイズを変更して画像を拡大/縮小することができます。 私は次のアルゴリズムを作った:PyQt - 自動的にウィジェット/ピクチャのサイズを変更する

  1. ウィジェットのサイズ
  2. は絵やウィジェットの高さ
  3. に基づく比はこれまでのところ、絵に

を表示画像

  • のサイズを変更計算しなさい素晴らしい仕事をしていますが、問題があります。私がプログラムを開くと、無期限に成長し始めます。ウィンドウが最初から大きくなっているので、ウィジェットが拡大して画像が大きくなっていることが分かります。それは肯定的なフィードバックです。 しかし、私はすでにサイズポリシーを優先、固定などに変更しようとしましたが、どれも効果がありませんでした。 Widget-> VLayout->ラベル(ピックスマップ画像)

    任意のアイデア:

    私の窓構造であるが、このですか? 任意の着信ヘルプあり

  • +0

    あなたはあなたのコード – eyllanesc

    答えて

    0

    可能な解決策は、カスタムウィジェットを作成し、次のコードに示すようにpaintEventメソッドを上書きすることです。

    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

    を示すことができることは、リサイズの問題を考慮するとうまく働いたが、私は私の質問に明確ではなかったと思う..私は実際にCAMを使用していますビデオのようにいくつかの写真を取得する。このように、この方法では、ラベルはサイズ変更されたときにのみリフレッシュされますが、新しいピクチャごとにリフレッシュする必要があります。これを解決するにはどうにかしていますか? – Eduardo

    +0

    PS: 'update()'をsetPixmapメソッドに追加しました。大いに感謝する!!! – Eduardo

    関連する問題