Объединение изображения и текста в кнопке в kivy

каков предпочтительный способ объединения изображения / значка и текста внутри кнопки? Например, как бы вы создали кнопку с text = 'my button', и графический значок слева от этого текста?

1 ответов


относительно вопроса №2.

то, как Kivy работает встраивание Widget экземпляров. С Image и Button являются подклассами виджет, то все, что вам нужно сделать, это вставить изображение внутри кнопки. Обратите внимание, что расположение внутри виджета фиксировано. Вы должны дать явные координаты.

тем не менее, вы всегда можете вставить Layout чтобы организовать материал, который вы кладете внутри кнопки.

вот простой ex

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

Builder.load_string("""
<ButtonsApp>:
    orientation: "vertical"
    Button:
        text: "B1"
        Image:
            source: 'kivy.png'
            y: self.parent.y + self.parent.height - 200
            x: self.parent.x
    Label:
        text: "A label"
""")

class ButtonsApp(App, BoxLayout):
    def build(self):
        return self

if __name__ == "__main__":
    ButtonsApp().run()

EDIT: пример того, как относительный макет может быть встроен в кнопку

в этом случае я использую StackLayout организовать Image и a Label внутри. Как я уже сказал,--4--> это Widget и Kivy работает встраивание виджетов внутри виджетов. Не имеет значения, являются ли они ярлыками, кнопками или макетами.

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

Builder.load_string("""
<ButtonsApp>:
    orientation: "vertical"
    Button:
        StackLayout:
            pos: self.parent.pos
            size: self.parent.size
            orientation: 'lr-tb'
            Image:
                source: 'kivy.png'
                size_hint_x: None
                width: 74
            Label:
                size_hint_x: None
                width: 100
                text: "The text"
    Label:
        text: "A label"
""")

class ButtonsApp(App, BoxLayout):
    def build(self):
        return self

if __name__ == "__main__":
    ButtonsApp().run()