2015-04-12 119 views
0

這裏就是我試圖完成,應該是簡單的:與下它列出了一些垂直按鈕標籤的標題文本和嵌套有點向右爲什麼沒有Kivy的佈局按預期工作?

一審判決:

#:kivy 1.9.0 


<[email protected]>: 

    size_hint: None, None 
    size: 40, 160 

BoxLayout: 

    orientation: "vertical" 

    Label: 
    text: "Choose Subject:" 
    font_size: "16sp" 
    bold: True 
    halign: "left" 


    BoxLayout: 

    orientation: "vertical" 
    padding_horizontal: 20 

    SubjectButton: 
     text: "Subject 1" 

    SubjectButton: 
     text: "Subject 2" 

    SubjectButton: 
     text: "Subject 3" 

    SubjectButton: 
     text: "Subject 4" 

結果: what's that supposed to mean?

二審開庭:

#:kivy 1.9.0 

#: set sb_width 120 
#: set sb_height 40 
#: set sb_margin_left 20 

<[email protected]>: 

size_hint: None, None 
height: sb_height 
width: sb_width 


RelativeLayout: 

Label: 
    text: "Choose Subject:" 
    font_size: "16sp" 
    bold: True 
    halign: "left" 
    pos: 0, root.height - 5 

SubjectButton: 
    text: "Subject 1" 
    pos: sb_margin_left, root.height - sb_height 

SubjectButton: 
    text: "Subject 2" 
    pos: sb_margin_left, root.height - 2 * sb_height 

SubjectButton: 
    text: "Subject 3" 
    pos: sb_margin_left, root.height - 3 * sb_height 

SubjectButton: 
    text: "Subject 4" 
    pos: sb_margin_left, root.height - 4 * sb_height 

結果:

Where's my label

標籤不見了!

讓我先說一下佈局從左上角開始,明確定位在左下角的想法是愚蠢的(來自PySide)。那該怎麼辦?

這並不是說AnchorLayout實際上不是一個佈局,而是一個對齊工具。它不會影響一個孩子。

我在這裏錯過了什麼?

回答

0

一審判決:

你這裏的問題是,你手動設置按鈕的高度,使他們的窗口高度的1/4。你看到的是他們溢出BoxLayout的高度,因爲這一點,顯然是從頂部。您通常不希望直接設置手動高度,而是讓BoxLayout設置大小以適應窗口大小的變化。

我不知道到底是什麼你真的要對,但這裏是使用嵌套boxlayouts來解決突出問題的例子:

<[email protected]>:                                
    # size rules deleted                               

BoxLayout:                                   

    orientation: "vertical"                               

    Label:                                   
     text: "Choose Subject:"                              
     font_size: "16sp"                               
     bold: True                                 
     halign: "left"                                
     valign: 'middle'                               
     text_size: self.size                              


    BoxLayout:                                  
     Widget:                                  
      size_hint_x: None                              
      width: 10                                
     BoxLayout:                                 

      orientation: "vertical"                             
      padding_horizontal: 20                             

      SubjectButton:                               
       text: "Subject 1"                             

      SubjectButton:                               
       text: "Subject 2"                             

      SubjectButton:                               
       text: "Subject 3"                             

      SubjectButton:                               
       text: "Subject 4"                             
     Label:                                  
      text: 'free space'    

注意,我也是在標籤,這樣設置text_size: self.size您的對齊生效。我還增加了垂直對齊。

我用Widget spacer包括了間距。可能填充參數可能會做同樣的事情,但我沒有檢查它的API。

二審: 標籤不見了!

它並沒有消失,只是將其y位置設置爲屏幕頂部以下5個像素,因此看不到文本。您可以通過添加例如以下爲其千伏規則,看到這裏顯然缺失部件是這是有用的:

canvas: 
     Color: 
      rgba: 1, 0, 0, 1 
     Rectangle: 
      pos: self.pos 
      size: self.size 

使用的RelativeLayout因爲這是一個壞主意,無論如何,這是更好的使用嵌套的佈局如上。

讓我先說一下佈局從左上角開始,在左下角明確定位的想法是愚蠢的(來自PySide)。那該怎麼辦?

我認爲它在某種意義上是不一致的,但老實說我從來沒有注意到它是一個問題。它是否導致你一個特殊的問題?

這並不是說,AnchorLayout實際上不是一個佈局,而是一個對齊工具。它不會影響一個孩子。

不知道你在這裏說的是什麼...... AnchorLayout像其他佈局一樣佈置子項。

+0

感謝您介紹空間間隔部件的想法。現在我結束了第一個解決方案的變體。 'AnchorLayout'是一個單一的部件的對齊工具,根據我的經驗和你的答案在這裏http://stackoverflow.com/questions/25337720/label-not-affected-by-anchorlayout-kivy#comment39520611_25339313。 – MadeOfAir