使用图像在Python的Kivy中填充GridLayout

时间:2017-12-05 03:56:32

标签: python image kivy

我有一个3行的kivy GridLayout,每行都有嵌套的BoxLayout。我需要用图像完全填充一行中的一个框。无论我在kv文件中进行哪些调整(例如size: self.sizesize_hint_x: 1,以及此堆栈中列出的步骤溢出Resizing an image to variable/fixed dimensions?),它都会维护图像的原始大小。

我所拥有的示例截图 - 我想放大紫色foo图像以填充整个红色矩形(纵横比对我来说并不重要): Screenshot

一些示例代码:

<MyGridLayout>:

      rows: 3
      padding: 0
      spacing: 0

      BoxLayout:
          orientation: "horizontal"
          size_hint: 0.15, 0.2

          Button:
              text: 'FOO_BUTTON'
              size_hint_x: 0.25

          Label:
              text: ''


      BoxLayout:
          orientation: "horizontal"

          Image :
              source: 'C:/my/path.png'


          Label :
              size_hint_x: 0.3
              text: "foo"


      BoxLayout:
          orientation: "horizontal"
          Label :
              size_hint_x: 0.7
              text: "foo"

          Label :
              size_hint_x: 0.3
              text: "foo"

1 个答案:

答案 0 :(得分:2)

要使图像尺寸最大化以适合图像框,您可以使用allow_stretchkeep_ratio属性:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder

Builder.load_string("""
<MyGridLayout>:
    rows: 3
    padding: 0
    spacing: 0

    BoxLayout:
        orientation: "horizontal"
        size_hint: 0.15, 0.2

        Button:
            text: 'FOO_BUTTON'
            size_hint_x: 0.25

        Label:
            text: ''

    BoxLayout:
        orientation: "horizontal"

        Image :
            source: 'C:/my/path.png'
            allow_stretch: True
            keep_ratio: False

        Label :
            size_hint_x: 0.3
            text: "foo5"

    BoxLayout:
        orientation: "horizontal"
        Label :
            size_hint_x: 0.7
            text: "foo"

        Label :
            size_hint_x: 0.3
            text: "foo"
""")

class MyGridLayout(GridLayout):
    pass


class Test(App):
    def build(self):
        return MyGridLayout()


if __name__ == '__main__':
    Test().run()

结果:

enter image description here