2017-06-12 229 views
0

我開發從CAM獲得一個圖片,並把它放在一個小部件的窗口軟件。由於我的圖片是640x480,我希望它調整圖片大小以適應窗口大小,因此用戶可以調整窗口大小以放大或縮小圖片。 我做了如下算法:PyQt的 - 自動調整大小部件/圖片

  1. 獲取部件尺寸
  2. 計算基於畫面和窗口小部件的高度的比值
  3. 調整圖像
  4. 顯示的畫面

到目前爲止,工作很好,但有一個問題。當我打開程序時,程序開始無限增長,我知道發生這種情況是因爲窗口小部件正在擴展,圖片變大,因爲窗口首先增加,這是一個積極的反饋。 但是,我已經嘗試將尺寸策略更改爲首選,固定等。並且都沒有工作。

我的窗口結構是這樣的:小窗口> 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