【问题标题】:Why won't my Enaml ImageView scale down?为什么我的 Enaml ImageView 不能按比例缩小?
【发布时间】:2018-06-04 01:53:57
【问题描述】:

这是一个简单的 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 允许缩小大图像?

版本:

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

【问题讨论】:

    标签: qt pyqt windows-10 pyqt5 enaml


    【解决方案1】:

    resist_widthresist_height 设置为'weak' 是正确答案。您可以在小部件上设置其他约束以为其提供首选大小:

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

    【讨论】:

    • scale_to_fit = Trueallow_upscaling = True 的设置对我也很有用
    【解决方案2】:

    如果我添加

            resist_width = 'weak'
            resist_height = 'weak'
    

    它可以让我缩小规模。

    不过,它也会默认以较小的尺寸打开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 2012-06-02
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多