为什么我的Enaml ImageView不会缩小?

时间:2018-05-30 16:41:45

标签: qt pyqt windows-10 pyqt5 enaml

这是一个简单的Enaml文件,用于显示单个图像 - 800x1210 pixel image

from enaml.widgets.api import Window, Container, ImageView
from enaml.image import Image

enamldef ImageViewResizeWindow(Window):
    Container:
        ImageView:
            image << Image(data=open("Mona_Lisa.jpg", "rb").read())
            scale_to_fit = True
            allow_upscaling = False
            preserve_aspect_ratio = True

窗口打开得相当大,以适应整个图像,但是当我尝试调整窗口大小时,它不会缩小 - 即使scale_to_fit为True,图像也无法缩小。另一方面,它将允许窗口调整大小,但(正确)不会放大图像 - 它只是增加了它周围的空间。

试验,我将allow_upscaling设置为True,它允许图像增长,但不会缩小。它知道如何进行缩放,但不会缩减。

好吧,也许ImageView必须有最小尺寸,所以我补充说:

            minimum_size = (100, 100)

这应该覆盖为ImageView小部件计算的“智能最小大小”,但没有区别。

我是Enaml的新手,所以我怀疑基本的误解。

当周围窗口调整大小时,我需要做些什么才能让ImageView允许缩小大图像?

版本:

  • Python 3.6.3(v3.6.3:2c5fed8,2017年10月3日,18:11:49)[MSC v.1900 64 bit(AMD64)] on win32
  • enaml == 0.10.2
  • PyQt5 == 5.10.1

2 个答案:

答案 0 :(得分:1)

resist_widthresist_height设置为'weak'是正确的答案。您可以在窗口小部件上设置其他约束,以使其具有首选大小:

ImageView: 
    resist_width = 'weak'
    resist_height = 'weak'
    constraints = [(width == 640) | 'weak', (height == 480) | 'weak']

答案 1 :(得分:0)

如果我添加

        resist_width = 'weak'
        resist_height = 'weak'

它可以让我缩小规模。

但是,默认情况下它也会以较小的尺寸打开。