我有一个kivy应用程序,我(学习)写。我对布局以及何时使用哪些布局感到困惑。
我在.kv文件中有一个基类,然后包含许多布局。最终这些组件将相互通信并将动态生成,但我想要做的第一件事就是将所有组件放在屏幕上以查看是否可以。
在这样的结构中:
<MyApp>
<AnchorLayout>
<Widget1>
<Widget2>
<FloatLayout>
<Widget3>
<Widget4>
<Label>
text: "text here"
使用size_hint
和pos_hint
标记的正确位置在哪里。它应该在小部件级别还是布局级别?如果有人可以打扰,我问这个的原因是,在下面的代码中,似乎对于最后的Label,我必须手动定位,pos_hint什么都不做(我希望它或多或少25%以上)左侧的页面)。我错过了什么?
# File name: MagStripeApp.kv
#:kivy 1.9.0
<MagStripeReader>:
AnchorLayout:
anchor_x: 'left'
anchor_y: 'top'
HeaderBar:
id: _header_bar
size_hint: 1, 0.15
AnchorLayout:
anchor_x: 'center'
anchor_y: 'bottom'
SessionBar:
id: _session_bar
mag_stripe_reader: root
entry_box: _entry_box
size_hint: 1, 0.1
pos_hint: {'center_x':0.5, 'center_y': 0.5}
FloatLayout:
size_hint: 1, 0.2
EntryBox:
id: _entry_box
request_box: _request_box
person_counter: _person_counter
request_box: _request_box
size_hint: 0.333, 1
RequestBox:
id: _request_box
person_counter: _person_counter
card_reader: _card_reader
size_hint: 0.333, 1
CardReader:
id: _card_reader
person_counter: _person_counter
size_hint: 0.333, 1
PersonCounter:
id: _person_counter
<HeaderBar@Label>:
text: "Mag Stripe Reader Application"
font_size: root.height/2.5
size: self.texture_size
bold: True
color: 0, 0.70, 0.93, 1
#This is not quite right, but is ok for now. The resizing does not work
#quite perfectly.
<SessionButton@ToggleButton>:
group: 'session_options'
background_color: 0, 0.70, 0.93, 1
color: 0.11, 0.39, 0.33, 0.75, 0.02
bold: True
<SessionBar@GridLayout>:
cols: 2
#col_default_width: root.width/3
SessionButton:
text: "Start Session"
SessionButton:
text: "End Session"
<EntryButton@Button>:
group: 'entry_buttons'
background_color: 0, 0.70, 0.93, 1
color: 0.11, 0.39, 0.33, 0.75, 0.02
bold: True
<EntryBox@GridLayout>:
pos_hint: {'x':0, 'center_y':0.5}
cols: 1
rows: 2
Label:
text: "Does Entrant have an EBT card?"
font_size: root.height/8
size: self.texture_size
bold: True
color: 0, 0.70, 0.93, 1
GridLayout:
cols: 2
EntryButton:
text: 'YES'
EntryButton:
text: 'NO'
<RequestButton@Button>:
group: 'request_buttons'
background_color: 0, 0.70, 0.93, 1
color: 0.11, 0.39, 0.33, 0.75, 0.02
bold: True
<RequestBox@GridLayout>:
cols: 1
rows: 2
pos_hint: {'x': 0.333, 'center_y':0.5}
Label:
text: "Will Entrant scan EBT card?"
font_size: root.height/8
size: self.texture_size
bold: True
color: 0, 0.70, 0.93, 1
GridLayout:
cols: 2
EntryButton:
text: 'YES'
EntryButton:
text: 'NO'
<CardReader@GridLayout>
cols: 1
rows: 2
pos_hint: {'x': 0.666, 'center_y':0.5}
Label:
text: 'Please scan EBT card'
font_size: root.height/8
size: self.texture_size
bold: True
color: 0, 0.70, 0.93, 1
TextInput:
password: True
multiline: False
<PersonCounter@Label>:
id: _person_counter
text: '1'
pos_hint: {'x' : 0.1, 'y' : 0.25}
#pos: -500, 100
size: self.texture_size
halign: 'left'
font_size: 50
答案 0 :(得分:2)
Kivy Layouts基本上是小工具吗?
布局是小部件。 Layout类的声明是class Layout(Widget):
等。
使用size_hint和pos_hint标签的适当位置在哪里。它应该是小部件级别还是布局级别?
它应该比您尝试设置其值的任何小部件低一级。 e.g。
BoxLayout:
orientation: 'vertical' # this applies to the BoxLayout instance
FloatLayout:
size_hint_y: 0.75 # The FloatLayout will take 75% of the vertical space
Label:
pos_hint: {x: '0.5', y: '0.75'} # The Label is placed 50% across the x axis, and 75% up the y axis
size_hint: None, None
size: 50, 50 # ...and has a fixed size
text: '!'
Button:
size_hint_y: 0.25
我无法评论您使用Label的具体示例,因为它不是有效的kv,并且不会尝试做您说失败的事情。如果这不能为您解答问题,请提供一个完整的示例,但不能达到您的预期效果。