2015-06-04 73 views
0

有一點問題。所以Iam試圖創建我自己的小部件,並且我已經成功了,除了設置它的大小和位置(與它的parrent相同)之外。Kivy - 創建新的小部件並設置其位置和大小

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

的應用程序有網格佈局的持有人,到了我所要傳遞的StoryWidget

class MyWidgets(object): 

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

故事的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 

根(Gridlayout)的整個第一列以白色正確重新繪製, 但Widget位於defaut pos(0,0)和默認大小(100,100)。 從我所知道的,因爲Widget不能處理這些事情。佈局應該以某種方式自動執行。可以看出,StoryWidget的根部件是佈局。我不知道爲什麼它不起作用。我試圖從佈局而不是Widget繼承,但仍然沒有。有什麼建議?謝謝!

+0

可以使StoryWidget的BoxLayout的子類 – fins

回答

1

好吧,我已經想通了,原來我忘了設置適當的屬性。所以,現在的IAM使用網格佈局,而不是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)