У меня есть 3 макета, размер 2-го зависит от ширины дочерних элементов 2-х других макетов:
def on_size(self, *args):
self.left_panel.width = max(child.texture_size[0] for child in self.left_panel.children) + self.side_padding
self.right_panel.width = max(child.texture_size[0] for child in self.right_panel.children) + self.side_padding
available_space = self.width - self.left_panel.width - self.right_panel.width
if available_space > self.height:
self.middle_panel.size = (self.height, self.height)
extra = (self.width - self.height - self.left_panel.width - self.right_panel.width) // 2
self.left_panel.width += extra
self.right_panel.width += extra
else:
self.middle_panel.size = (available_space, available_space)
self.middle_panel.calculate_points()
self.middle_panel.clear_widgets()
self.middle_panel.redraw_blocks()
Корректно работает только в 50% случаев (случайно) почему-то. Если он загружает Wearg, он становится правильным после того, как я изменяю размер окна. Также на данный момент я вызываю это, когда срабатывает on_size()
каждого дочернего элемента 2 других макетов, это плохая идея. Есть ли какое-то событие или еще, когда все загружено/представлено?
ОБНОВЛЕНИЕ:
Так и должно быть (иногда так и есть).
Но иногда случайным образом возникает следующая проблема (см. кнопки справа):
ОБНОВЛЕНИЕ:
Пока я называю это:
class SideButton(Button):
def on_size(self, *args):
self.parent.parent.on_size()
Я знаю, что это плохая идея, потому что это вызывает что-то около 30-50 раз, но я не могу придумать что-то лучше.
width
иheight
. Но если вы помещаете эти макеты вBoxLayout
и устанавливаете дляleft_panel
иright_panel
size_hint_x
значение None, тогда середина должна автоматически заполнить дополнительное пространство. - person kitti   schedule 12.08.2014size_hint_x: None
текст метки выходит за край. У меня есть это (см. картинки )а>. Кроме того, даже если он загружается неправильно, он становится правильным после изменения размера окна. - person Necronomicron   schedule 12.08.2014size_hint_x
уже None. Но это не имеет значения. - person Necronomicron   schedule 12.08.2014