def compute_layout(self, *, n_cols, n_rows, ori, n_children): from kivy.uix.widget import Widget from kivy.uix.gridlayout import GridLayout gl = GridLayout(cols=n_cols, rows=n_rows, orientation=ori, pos=(0, 0)) gl.bind(minimum_size=gl.setter("size")) for __ in range(n_children): # set 'pos' to some random value to make this test more reliable gl.add_widget( Widget(size_hint=(None, None), size=(100, 100), pos=(8, 8))) gl.do_layout() return [tuple(c.pos) for c in reversed(gl.children)]
def test_children_pos(n_cols, n_rows, orientation, n_children, expectation): from kivy.uix.widget import Widget from kivy.uix.gridlayout import GridLayout gl = GridLayout(cols=n_cols, rows=n_rows, orientation=orientation, pos=(0, 0), size=(30, 30)) for __ in range(n_children): gl.add_widget(Widget()) gl.do_layout() actual_layout = [tuple(c.pos) for c in reversed(gl.children)] assert actual_layout == expectation