我有一个包含一些小部件的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)
然而,当我调整窗口大小时,窗口小部件的位置会从我想要的位置移动。有没有办法可以强制浮动布局在调整大小时具有固定的宽高比?
答案 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