Kivy - 创建新小部件并设置其位置和大小

时间:2015-06-04 21:21:36

标签: python python-3.x widget kivy custom-widgets

有点问题。所以Iam试图创建我自己的小部件,并且我已经成功,只是将其大小和位置设置正确(与其parrent相同)。

class Story(App):
    def build(self):    
        return MyWidgets().init()

该应用将GridLayout作为持有者,我想传递StoryWidget

class MyWidgets(object):

    def init(self):
        root = GridLayout(cols=2,rows=1)
        root.add_widget(StoryWidget())
        root.add_widget(Button())
        return root

Story Widget如下:

class StoryWidget(Widget):
    def __init__(self,**kwargs):
        super(StoryWidget, self).__init__(**kwargs)
        topLayout=BoxLayout(orientation = "vertical")
        topLayout.add_widget(Button(text="first"))
        topLayout.add_widget(Button(text="second"))
        self.add_widget(topLayout)

如果我尝试获取背景颜色,它可以正常工作:

        with self.canvas.before:
            Color(.9,.9,1)  
            self.Backgroud = Rectangle(pos=self.pos,size=self.size)

        self.bind(pos=self.repaint,size=self.repaint)
        self.bind(pos=self.resize,size=self.resize)

    def repaint(self,*args):
        self.Backgroud.pos = self.pos
        self.Backgroud.size = self.size

root(Gridlayout)的整个第一列被正确地重新绘制为白色, 但Widget位于defaut pos(0,0)和默认大小(100,100)。 据我所知,它因为Widget无法处理这些事情。布局应该以某种方式自动完成。可以看出,StoryWidget的根小部件是布局。我不知道它为什么不起作用。我试图从布局而不是Widget继承,但仍然没有。有什么建议?谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,我已经弄明白了,原来我忘了设置适当的属性。所以Iam现在使用Gridlayout而不是BoxLayout,在这种情况下它需要cols和rows,所以它现在应该是这样的:

class StoryWidget(GridLayout):
    def __init__(self,**kwargs):
        self.cols=1
        self.rows=1
        super(StoryWidget, self).__init__(**kwargs)
        topLayout=BoxLayout(orientation = "vertical")
        topLayout.add_widget(Button(text="first"))
        topLayout.add_widget(Button(text="second"))
        self.add_widget(topLayout)

    with self.canvas.before:
        Color(.9,.9,1)  
        self.Backgroud = Rectangle(pos=self.pos,size=self.size)

    self.bind(pos=self.repaint,size=self.repaint)
    self.bind(pos=self.resize,size=self.resize)