You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kivy的allow_stretch?我的设置为何未生效?

Kivy中allow_stretch功能无效问题解决

我在使用Kivy时遇到allow_stretch功能无效的问题,以下是我的代码:

from kivy.app import App
from kivy.lang import Builder

kv = """
GridLayout:
    cols: 3
    Image:
        source: "images/cake.jpeg"
        allow_stretch: False
    Image:
        source: "images/cake.jpeg"
        allow_stretch: True
"""


class TestApp(App):
    def build(self):
        return Builder.load_string(kv)


TestApp().run()

我期望两张图片显示效果不同,但它们看起来完全一致。

问题原因

默认情况下,Image组件的size_hint为(1,1),会强制占满GridLayout分配的单元格空间,这直接覆盖了allow_stretch的配置,导致该属性无法发挥作用。allow_stretch需要配合keep_ratio以及调整组件的大小约束才能生效。

解决方案

调整Image的size_hint并结合keep_ratio配置,让allow_stretch的效果显现:

from kivy.app import App
from kivy.lang import Builder

kv = """
GridLayout:
    cols: 3
    # 不允许拉伸,保持原比例和尺寸
    Image:
        source: "images/cake.jpeg"
        allow_stretch: False
        keep_ratio: True
        size_hint: None, None
        size: self.texture_size
    # 允许拉伸,填充整个单元格(不保持比例)
    Image:
        source: "images/cake.jpeg"
        allow_stretch: True
        keep_ratio: False
        size_hint: 1, 1
"""


class TestApp(App):
    def build(self):
        return Builder.load_string(kv)


TestApp().run()

说明

  • 第一张图通过size_hint: None, None和size: self.texture_size锁定原尺寸,allow_stretch: False确保不会被强制拉伸;
  • 第二张图保留size_hint: 1,1占满单元格,allow_stretch: True结合keep_ratio: False让图片拉伸填充整个空间,与第一张形成明显差异。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:45:58