还在学习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
我得到了这个(正如预期的那样):
但是,当我尝试将每个象限设置为动态容器而不是普通的Button
,Label
,Image
等小部件时(如此):
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
对象的存储桶不起作用?
答案 0 :(得分:2)
尝试继承Container
或其中一个子类(例如kivy.uix.layout.Layout
)的kivy.uix.layout.BoxLayout
类。
小部件的默认大小为(100,100)。仅当父级为http://kivy.org/docs/api-kivy.uix.layout.html#kivy.uix.layout.Layout时才会更改此选项。例如,如果在Button内添加Label,标签将不会继承按钮的大小或位置,因为该按钮不是Layout:它只是另一个Widget。