有点问题。所以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继承,但仍然没有。有什么建议?谢谢!
答案 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)