获取PyQ中QScrollArea中视口的大小

2024-05-15 21:17:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在编写一个显示显微镜视频的程序。视频的大小是2208*1648。这比可用的屏幕尺寸大得多。所以我用QScrollArea来显示它。在

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

这会将视频缩放到视口的大小。因此,最初的视频完全显示在没有滚动条的滚动区域的视口中。现在必须可以放大视频的特定部分。因此可以输入zoomfactor。完成后,将执行以下代码:

^{pr2}$

显示实际视频时,使用以下函数将图像发送到标签

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())

这很管用。但也有几个问题: 1setWidgetResizable不支持aspectratio 2当用户缩小时,最终图片会比视口小,这不是我想要的。 三。我试着用

sizehint = self.scrollArea.viewportSizeHint()

然后我得到了一个看起来或多或少正确的大小,但是当我调整窗口大小时,结果不会改变。在

事先非常感谢


Tags: imageself程序视频屏幕尺寸currentset
1条回答
网友
1楼 · 发布于 2024-05-15 21:17:56

在调整大小之前,计算缩放因子:

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。在

相关问题 更多 >