在调整窗口时如何在Kivy中的图像之间保持固定的宽度?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在调整窗口时如何在Kivy中的图像之间保持固定的宽度?相关的知识,希望对你有一定的参考价值。
我有一些图像,尺寸均为680 x 1000像素。我在Kivy中设置了水平滚动视图(使用python),我想在其上显示这些图像。问题是,当我调整窗口大小时,图像之间的空间会改变。到目前为止,这是我的代码:
import kivy
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image
class MyGrid(GridLayout):
def __init__(self, **kwargs):
super(MyGrid, self).__init__(**kwargs)
self.rows = 1
self.size_hint = None, .8
self.bind(minimum_width=self.setter('width'))
class MyBox(BoxLayout):
def __init__(self, **kwargs):
super(MyBox, self).__init__(**kwargs)
self.orientation = "vertical"
self.size_hint_x = None
self.bind(minimum_width=self.setter('width'))
class ScrollViewApp(App):
def build(self):
base = FloatLayout()
grid = MyGrid()
grid.width = 680
box = MyBox()
box.add_widget(Widget(size_hint_y=.1))
box.add_widget(grid)
box.add_widget(Widget(size_hint_y=.1))
img = Image(source="img.jpg", allow_stretch=True, keep_ratio=True)
img.stretch = True
img.size = grid.size
grid.add_widget(img)
img = Image(source="img2.jpg", allow_stretch=True, keep_ratio=True)
img.stretch = True
img.size = grid.size
grid.add_widget(img)
scroll = ScrollView(do_scroll_y=False, pos_hint="center_y": .5)
scroll.add_widget(box)
base.add_widget(scroll)
return base
if __name__ == '__main__':
ScrollViewApp().run()
我发现这篇文章很有用,尽管它似乎并没有解决我所需要的一切:kivy image button size and position
如果我在图像中拥有最大尺寸的图像,则会得到以下信息:
这些图像太靠近!另一方面,如果我缩小窗口,则会得到以下信息:
现在它们相距太远了!如何使图像随着大小的增长或缩小而彼此保持相同的水平距离?即使我在MyGrid()类中添加了填充,我仍然遇到相同的问题。
答案
我更喜欢让Kivy
为我做绑定,所以我的解决方案使用kv
:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.image import Image
class MyImage(Image):
pass
theRoot = Builder.load_string('''
ScrollView:
do_scroll_y: False
BoxLayout:
id: box
orientation: 'horizontal'
spacing: 10
size_hint: None, 1.0
width: self.minimum_width # binds BoxLayout width to the sum of child widths (plus spacing, padding, etc)
<MyImage>:
size_hint: None, 1.0
allow_stretch: True
keep_ratio: True
width: self.height * self.image_ratio # set width (needed for BoxLayout minimum width calculations)
''')
class ScrollViewApp(App):
def build(self):
box = theRoot.ids.box
img = MyImage(source="img.jpg")
box.add_widget(img)
img = MyImage(source="img2.jpg")
box.add_widget(img)
return theRoot
if __name__ == '__main__':
ScrollViewApp().run()
以上是关于在调整窗口时如何在Kivy中的图像之间保持固定的宽度?的主要内容,如果未能解决你的问题,请参考以下文章