2014-07-21 45 views
0

我可能缺少一些非常基本的東西,但是在嵌套佈局時,Kivy中的對象放置存在問題。Kivy中的嵌套佈局放置在左下角包含小部件

假設我這樣做:

<RootWidget>: # Derives from StackLayout 

    orientation: 'tb-lr' 
    size_hint: (None, 1) 
    padding: (10, 10) 
    spacing: (10, 10) 

    Button: 
     text: "One" 
     size: 100, 100 
     size_hint: None, None 
    Button: 
     text: "Two" 
     size: 100, 100 
     size_hint: None, None 

這產生很好地放置在佈局一個在另一個之上的內部兩個按鈕。

現在,如果按鈕中的我窩又一佈局裏面,就像這樣:

<RootWidget>: # Derives from StackLayout 

    orientation: 'tb-lr' 
    size_hint: (None, 1) 
    padding: (10, 10) 
    spacing: (10, 10) 

    Widget: 
     size: 100, 100 
     size_hint: None, None 

     Button: 
      text: "One" 
      size: 100, 100 
      size_hint: None, None 

    Button: 
     text: "Two" 
     size: 100, 100 
     size_hint: None, None 

的第一個按鈕在底部最終離開的畫面。

當我運行Kivy inspector時,它顯示Widget的位置是正確的,但無論我做什麼,Button的位置都是0,0。我開始懷疑它與相對與絕對座標有關。

什麼是正確的方式來嵌套第一Button下別的東西,同時保持其預期的位置?

P.S.我真的很想在kv的語言而不是Python中這樣做,因爲我使用的是複雜的模板系統,這個例子只是一個簡單的例子。

+0

'Widget'是* not *佈局,它只是一個小部件。它不會對子項的位置做任何事情,所以它們只有默認值(0,0),除非您設置了其他值。 – inclement

+0

http://stackoverflow.com/questions/24869599/boxlayout-draw-all-widget-in-the-corner的副本 –

回答

1

由於小部件不會自動控制它的孩子的位置和大小,所以您需要使用BoxLayout。在一個BoxLayout中放置一個小部件將自動控制小部件的位置和大小,這樣你就不會得到在默認位置和大小下繪製的小部件 - at(x,y)=(0,0)和size(100 ,100)

如果BoxLayout是水平的,那麼向佈局添加另一個小部件將會推動之前的小部件並調整它們的大小,使它們都佔據水平空間的相等部分。

然後,您可以通過更改佈局子項的size_hint屬性來調整每個小部件的相對大小。

Widget: 
    size: 100, 100 
    size_hint: None, None 

    BoxLayout: 
     orientation: 'horizontal' 
     Button: 
      text: "One" 
      size: 100, 100 
      size_hint: None, None