2016-01-13 119 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后调用。