我有一个3行的kivy GridLayout,每行都有嵌套的BoxLayout。我需要用图像完全填充一行中的一个框。无论我在kv文件中进行哪些调整(例如size: self.size
,size_hint_x: 1
,以及此堆栈中列出的步骤溢出Resizing an image to variable/fixed dimensions?),它都会维护图像的原始大小。
我所拥有的示例截图 - 我想放大紫色foo图像以填充整个红色矩形(纵横比对我来说并不重要):
一些示例代码:
<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"
答案 0 :(得分:2)
要使图像尺寸最大化以适合图像框,您可以使用allow_stretch
和keep_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()
结果: