强制FloatLayout为方形?

时间:2017-08-24 09:25:58

标签: python layout kivy kivy-language

我有一个包含一些小部件的floatlayout:

    fl = FloatLayout(size=(600,600),
                     pos_hint=({'center_x': .5, 'center_y': .5})) 

    pos1 = ImgButton(source='zulgrey.png',
                     size_hint=(0.2,0.2),
                     pos_hint=({'center_x': 0, 'center_y': .43}))

    pos2 = ImgButton(source='zulgrey.png',
                     size_hint=(0.2,0.2),
                     pos_hint=({'center_x': 0.5, 'center_y': 0.93}))

    pos3 = ImgButton(source='zulgrey.png',
                     size_hint=(0.2,0.2),
                     pos_hint=({'center_x': 1, 'center_y': .43}))

    pos4 = ImgButton(source='zulgrey.png',
                     size_hint=(0.2,0.2),
                     pos_hint=({'center_x': 0.5, 'center_y': .43}))
    fl.add_widget(cove)
    fl.add_widget(pos1)
    fl.add_widget(pos2)
    fl.add_widget(pos3)
    fl.add_widget(pos4)

然而,当我调整窗口大小时,窗口小部件的位置会从我想要的位置移动。有没有办法可以强制浮动布局在调整大小时具有固定的宽高比?

2 个答案:

答案 0 :(得分:0)

嗯,是的,有间接和一些基本的数学。

将小部件放入另一个FloatLayout,并将此floatlayout的大小绑定到一个函数以更新当前的floatlayout。

def update_size(self, inst, size):
    target_ratio = 16/9.
    width, height = size
    # check which size is the limiting factor
    if width / height > target_ratio:
         # window is "wider" than targeted, so the limitation is the height.
         fl.height = height
         fl.width = height * target_ratio
     else:
         fl.width = width
         fl.height = width / target_ratio

你想在fl上禁用size_hint,这样该方法可以有效地设置它的大小,同样,你当然希望fl以其父布局为中心。

fl.size_hint = None, none
fl.pos_hint = {'center': (.5, .5)}

答案 1 :(得分:0)

解决这个问题:

FloatLayout:
    size_hint: 1, None
    size: self.width, self.width

size_hint:1 不一定是一个,我只是想让我的方块填充FloatLayout的大小。

可替换地:

FloatLayout:
    size_hint: None, 1
    size: self.height, self.height