Kivy:将原始Widget添加到GridLayout(而不是Image,Button等)

时间:2015-06-06 05:03:25

标签: kivy

还在学习Kivy的来龙去脉,但我遇到了一个有趣的问题。假设我有一个GridLayout,就像这样:

class MainApp(App):

    def build(self):
        self.root = GridLayout(cols=2)

        for i in range(4):
            self.root.add_widget(Button(text='Button {}'.format(i)))

        return self.root

我得到了这个(正如预期的那样):

但是,当我尝试将每个象限设置为动态容器而不是普通的ButtonLabelImage等小部件时(如此):

class Container(Widget):

    def __init__(self, *args, **kwargs):
        _id = kwargs.pop('button_id')
        super(Container, self).__init__(*args, **kwargs)

        self.add_widget(Button(text="Button {}".format(_id)))


class MainApp(App):

    def build(self):
        self.root = GridLayout(cols=2)

        for i in range(4):
            self.root.add_widget(Container(button_id=i))

        return self.root

我明白了:

请注意,无论窗口大小如何,每个小部件都位于左下角并保持较小的尺寸。

添加使用此功能的已烘焙的Kivy窗口小部件类型是什么,但使用Widget对象作为其他Widget对象的存储桶不起作用?

1 个答案:

答案 0 :(得分:2)

尝试继承Container或其中一个子类(例如kivy.uix.layout.Layout)的kivy.uix.layout.BoxLayout类。

来自the Widget docs

  

小部件的默认大小为(100,100)。仅当父级为http://kivy.org/docs/api-kivy.uix.layout.html#kivy.uix.layout.Layout时才会更改此选项。例如,如果在Button内添加Label,标签将不会继承按钮的大小或位置,因为该按钮不是Layout:它只是另一个Widget。