Kivy Layouts基本上是小工具吗?

时间:2015-10-07 21:49:39

标签: python kivy

我有一个kivy应用程序,我(学习)写。我对布局以及何时使用哪些布局感到困惑。

我在.kv文件中有一个基类,然后包含许多布局。最终这些组件将相互通信并将动态生成,但我想要做的第一件事就是将所有组件放在屏幕上以查看是否可以。

在这样的结构中:

<MyApp>
    <AnchorLayout>
        <Widget1>
        <Widget2>
    <FloatLayout>
        <Widget3>
        <Widget4>
    <Label>
        text: "text here"

使用size_hintpos_hint标记的正确位置在哪里。它应该在小部件级别还是布局级别?如果有人可以打扰,我问这个的原因是,在下面的代码中,似乎对于最后的Label,我必须手动定位,pos_hint什么都不做(我希望它或多或少25%以上)左侧的页面)。我错过了什么?

enter image description here

# 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

1 个答案:

答案 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,并且不会尝试做您说失败的事情。如果这不能为您解答问题,请提供一个完整的示例,但不能达到您的预期效果。