2016-01-13 118 views
1

我們正在編寫一個程序來顯示來自顯微鏡的視頻。視頻的大小是2208 * 1648。這比可用的屏幕尺寸大得多。所以我使用QScrollArea來顯示它。在PyQt的QScrollArea中獲取視口的大小

self.scrollArea = QScrollArea(self) 
    self.scrollArea.setBackgroundRole(QPalette.Dark) 
    self.scrollArea.setWidget(self.imageLabel) 
    self.scrollArea.setWidgetResizable(True) 

這將視頻縮放到視口的大小。所以最初,視頻完全顯示在沒有滾動條的Scrollarea的視口中。現在必須可以放大視頻的特定部分。因此可以輸入縮放因子。當這樣做執行以下代碼:

def scaleImage(self, factor): 
    self.scrollArea.setWidgetResizable(False) 
    self.imageLabel.resize(factor * self.imageLabel.pixmap().size()) 

    self.adjustScrollBar(self.scrollArea.horizontalScrollBar(), factor) 
    self.adjustScrollBar(self.scrollArea.verticalScrollBar(), factor) 

當顯示實際的視頻,圖像是使用下面的函數

def set_image(self, pixmap): 
    self.imageLabel.set_image(pixmap, self.current_width, self.current_height) 
    self.imageLabel.resize(self.current_zoomfactor * self.imageLabel.pixmap().size()) 

此作品發送到標籤。但有幾個問題: 1. setWidgetResizable不尊重寬高比 2.當用戶縮小時,最終圖片變得小於視口,這不是我想要的。 3.我嘗試使用

sizehint = self.scrollArea.viewportSizeHint() 

然後我得到一個尺寸看起來或多或少正確獲取視野的大小,但是當我調整窗口大小的結果不會改變。

在此先感謝

+0

我會自己回答這個問題.... –

+0

它證明大小已被正確調整,但我被初始值弄糊塗了,因爲這個小部件並沒有完全構建,所以這些初始值是不正確的。 –

回答

0

很多計算變焦倍率調整大小前:

def handle_min_zoomfactor(self, new_zoomfactor): 
    self.minimal_zoom = self.scrollArea.viewport().width()/self.sensor_width 
    if new_zoomfactor < self.minimal_zoom: 
     new_zoomfactor = self.minimal_zoom 
    if new_zoomfactor > 1.0: 
     new_zoomfactor = 1 

是scaleImage後調用。