以下是我要完成的内容,应该很简单:标签中的标题文字,其下方列有一些垂直按钮,并且向右嵌套
初审:
#:kivy 1.9.0
<SubjectButton@Button>:
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"
结果:
第二次审判:
#:kivy 1.9.0
#: set sb_width 120
#: set sb_height 40
#: set sb_margin_left 20
<SubjectButton@Button>:
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
结果:
标签不见了!。
首先让我说布局从左上角开始,在左下角显式定位的想法是愚蠢的(来自PySide)。这应该如何运作?。
这并不是说AnchorLayout实际上不是布局而是对齐工具。它不会影响一个孩子。
我在这里缺少什么?。
答案 0 :(得分:0)
初审:
这里的问题是您手动设置按钮高度并使它们占窗口高度的1/4。你所看到的是他们因为这个而溢出BoxLayout高度,显然是从顶部开始。你通常不想直接设置手动高度,但让BoxLayout设置大小,以便它适应窗口大小的变化。
我不确定你究竟想要做什么,但这里有一个使用嵌套boxlayouts来解决明显问题的例子:
<SubjectButton@Button>:
# 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'
请注意,我还在Label中设置了text_size: self.size
,以便您的对齐生效。我还添加了垂直对齐。
我在Widget垫片中加入了间距。可能填充参数也可以做同样的事情,但我没有检查它的api。
二审: 标签不见了!。
它没有消失,您只需将其y位置设置为屏幕顶部下方5个像素,这样您就无法看到文字了。您可以通过添加以下内容来查看其确实位置以下是其kv规则,这对于查看明显缺少小部件的位置非常有用:
canvas:
Color:
rgba: 1, 0, 0, 1
Rectangle:
pos: self.pos
size: self.size
无论如何,使用RelativeLayout是一个坏主意,使用上面的嵌套布局会更好。
首先让我说布局从左上角开始,在左下角显式定位的想法是愚蠢的(来自PySide)。这应该如何运作?。
我认为它在某种意义上是不一致的,但说实话,我从来没有注意到它是一个问题。它会引起你一个特定的问题吗?
更不用说AnchorLayout实际上不是布局而是对齐工具。它并不影响一个孩子。
不确定你在这里的意思...... AnchorLayout就像其他任何布局一样布置它的孩子。