Несколько текстовых полей внутри языка Kivy Button / Label - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу иметь кнопку с датой, затем под значком погоды, а затем под этой температурой.Но kivy, кажется, игнорирует / перезаписывает первое текстовое поле вторым, когда я делаю это следующим образом:

Button:
    text: "Day"
    text_size: self.size
    halign: 'center'
    valign: 'top'
    padding_y: 10

    text: "temp"
    text_size: self.size
    halign: 'center'
    valign: 'bottom'
    padding_y: 30

    Image:
        source: "data/%s.png" % root.dIcon
        pos: self.parent.center_x-(self.width/2), self.parent.center_y-(self.height/4)
        height: self.parent.height-self.parent.height/3
        width: self.parent.width/2

Затем, если я пытаюсь создать 2 метки внутри кнопки (как показано ниже), она не будет компилироваться сОшибка атрибута getitem .

Button:
    Label:
        text: "Day"
        text_size: self.size
        halign: 'center'
        valign: 'top'
        padding_y: 10
    Label:
        text: "temp"
        text_size: self.size
        halign: 'center'
        valign: 'bottom'
        padding_y: 30
    Image:
        source: "data/%s.png" % root.dIcon
        pos: self.parent.center_x-(self.width/2), self.parent.center_y-(self.height/4)
        height: self.parent.height-self.parent.height/3
        width: self.parent.width/2

Есть ли способ сделать это или мне нужно иметь отдельные поля, скажем, BoxLayout, где только изображение кликабельно?

РЕДАКТИРОВАТЬ: IПонял, что я могу добиться этого, я поставил несколько символов \ n между днем ​​и темпом, а затем положил иконку поверх них.Я все еще хотел бы видеть, есть ли лучший способ сделать это, так как это будет на мобильных устройствах другого размера.

1 Ответ

0 голосов
/ 10 ноября 2018

Вы должны использовать BoxLayout с многострочным ярлыком

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

Builder.load_string('''
<MyButton>:
    orientation: 'vertical'
    Label: 
        text: "Day\\nTemp"
        halign: 'center'
    Image:
        source: "data/%s.png" % root.dIcon
''')

class MyButton(BoxLayout, Button):
    pass

class TestApp(App):
    def build(self):
        return MyButton()

if __name__ == '__main__':
    TestApp().run()

Или BoxLayout с 2 ярлыками:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

Builder.load_string('''
<MyButton>:
    orientation: 'vertical'
    Label: 
        text: "Day"
    Label: 
        text: "Temp"
    Image:
        source: "data/%s.png" % root.dIcon
''')

class MyButton(BoxLayout, Button):
    pass

class TestApp(App):
    def build(self):
        return MyButton()

if __name__ == '__main__':
    TestApp().run()
...